Ograniczenie prędkości w <Esc> O (Wstaw do normalnego, aby wstawić nową linię powyżej kursora)


16

Często, gdy jestem w trybie wstawiania, uderzam, Escaby przejść do trybu normalnego, a następnie natychmiast uderzam, Oaby rozpocząć nową linię nad kursorem i przejść do trybu wstawiania.

Ale kiedy to robię, po trafieniu następuje 1 sekundowe opóźnienie, Ozanim pojawi się jakakolwiek widoczna odpowiedź. Ponadto jeśli zacznę wpisywać nowy tekst w tym 1-sekundowym opóźnieniem, jeśli nowy tekst zaczyna się od któregokolwiek z określonego zestawu znaków (np j, k, m, n, o), I kończy się w środku jakiejś innej operacji nie miałem zamierzam, często robiąc bałagan, w którym to momencie muszę się zatrzymać i grzebać w cofnięciach i przeróbkach, dopóki nie będę mieć pewności, że usunąłem obrażenia.

Aby uniknąć tej nieprzyjemności, miałem zwyczaj przerywania na sekundę za każdym razem, gdy piszę O. Ale to spowalnia mnie i uniemożliwia bycie demonem prędkości vim, którym inaczej byłbym.

Co to powoduje? Czy istnieje poprawka lub obejście?

Odpowiedzi:


15

Dzieje się tak tylko w terminalu, ale nie w GVIM, prawda? Powodem jest to, że Vim nie można odróżnić poszczególnych rodzajów kluczy i sekwencji escape ANSI wychodząc z tych samych kluczy (czyli ^[O..., <Esc>po czym Ow danym przypadku).

Możesz przeczytać o wszystkich podstawowych złożonościach w :help 'timeout'(i następujących opcjach). Znajdziesz tam również sugerowaną konfigurację, która łagodzi problem:

:set timeout timeoutlen=1000 ttimeoutlen=100

3
Możesz także użyć set noesckeys; ma to jednak efekt uboczny polegający na wyłączeniu klawiszy strzałek (i być może niektórych innych klawiszy?) w trybie wstawiania, więc może nie być dla wszystkich.
Martin Tournoij

2
@Carpetsmoker Jeśli chodzi o „set noesckeys” ... to działa, ale tylko w trybie wstawiania. Wiem, że powiedziałem, że na początku byłem w trybie wstawiania; jednak często robię także <Esc> O, zaczynając od trybu normalnego (głównie gdy nie jestem w 100% pewien, czy zaczynam w trybie wstawiania czy normalnym), więc chciałbym również coś, co zadziała w tym przypadku.
Don Hatch

1
@DonHatch Można użyć :nnoremap ^[O O, gdzie ^[wprowadzane jest przez naciśnięcie <C-v><Esc>(może również pojawiać się jako <1b>).
Martin Tournoij

5

Aby obejść ten problem, zamiast + ESCOużyj Control+ OO. Control+ Przełącza Ocię w tryb normalny dla jednego polecenia, a następnie powraca do trybu wstawiania, gdy jest zrobiony.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.