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?

Don Hatch
źródło

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
Ingo Karkat
źródło
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.

Ross Presser
źródło
1

Co powiesz na:

Control+C O

Istnieją pewne subtelności podczas używania Control+, o Cktórych powinieneś wiedzieć.

Mikeazo
źródło