Скорость на <Esc> O (Вставить в нормальное положение, чтобы вставить новую строку над курсором)

16

Часто, когда я нахожусь в режиме вставки, я нажимаю, Escчтобы перейти в обычный режим, а затем сразу же нажимаю, Oчтобы начать новую строку над курсором и перейти в режим вставки там.

Но когда я это делаю, происходит задержка в 1 секунду после того, как я нажму на кнопку, Oпрежде чем появится какой-либо видимый ответ. Кроме того , если я начинаю вводить новый текст в течение этого 1-секундной задержки, если новый текст начинается с какой - либо из определенного набора символов (например j, k, m, n, o), я в конечном итоге в середине какой - либо другой операции я не сделал намереваясь, часто устраивая беспорядок, в этот момент мне приходится останавливаться и возиться с отменами и повторами, пока я не буду достаточно уверен, что отменил ущерб.

Чтобы избежать этой неприятности, я привык делать паузу на одну секунду после каждого набираемого текста O. Но это замедляет меня и мешает быть демоном скорости vim, которым я был бы в противном случае.

Что вызывает это? Есть ли исправление или обходной путь?

Дон хэтч
источник

Ответы:

15

Это происходит только в терминале, но не в GVIM, верно? Причина заключается в том, что Vim не может различить отдельные типы ключей и управляющей последовательности ANSI , начиная с теми же ключами (т.е. ^[O..., <Esc>после чего Oв вашем случае).

Вы можете прочитать обо всех основных сложностях в :help 'timeout'(и следующие варианты). Там вы также найдете предложенную конфигурацию, которая устраняет проблему:

:set timeout timeoutlen=1000 ttimeoutlen=100
Инго Каркат
источник
3
Вы также можете использовать set noesckeys; это имеет побочный эффект отключения клавиш со стрелками (и, возможно, некоторых других клавиш?) в режиме вставки, так что это может быть не для всех.
Мартин Турной
2
@Carpetsmoker Относительно "set noesckeys" ... это работает, но только если в режиме вставки. Я знаю, я сказал, что я был в режиме вставки для начала; однако я также часто выполняю <Esc> O, начиная с обычного режима (в основном, когда я не уверен на 100%, начинаю ли я в режиме вставки или нормальном режиме), поэтому мне бы хотелось, чтобы что-то работало и в этом случае.
Дон Хэтч
1
@DonHatch Вы можете использовать :nnoremap ^[O O, где ^[вводится нажатием <C-v><Esc>(может также отображаться как <1b>).
Мартин Турной
5

В качестве обходного пути вместо ESCOиспользования Control+ OO. В Control+ Oпомещает Вас в обычном режиме для одной команды, а затем возвращает вас в режиме вставки , когда это делается.

Росс Прессер
источник
1

Как насчет:

Control+C O

Есть некоторые тонкости при использовании Control+, о которых Cвы должны знать.

mikeazo
источник