3

Когда я нажимаю esc или Ctrl-[ в режиме вставки vim, он зависает на полсекунды перед выходом из режима вставки. Это не зависание от производительности, так как я могу ввести любой символ, и vim немедленно выйдет из режима вставки, но если я нажму esc и ничего больше, то vim будет ждать полсекунды.

Я считаю, что это потому, что есть какая-то другая привязка клавиш для esc, и vim ждет, чтобы увидеть, ударил ли я по ней. Это подозрение подкрепляется тем фактом, что, когда я set notimeout , vim будет бесконечно долго ждать, пока я нажму другую клавишу до существующего режима вставки. Это довольно раздражает, так как иногда мне нравится устанавливать notimeout .

Кто-нибудь знает, как заставить esc действовать немедленно? Есть ли какая-нибудь другая привязка клавиш, которая начинается с esc которую я могу отключить?

Для чего это стоит :map <Esc> и :imap <Esc> yield No mapping found , и я могу воспроизвести его на новой установке vim без наличия .vimrc или .vim .

2 ответа2

3

Несколько клавиш, включая клавиши со стрелками, отправляют escape-последовательности. Таким образом, чтобы эти клавиши работали, vim должен проверить наличие дополнительных символов после ESC, чтобы определить, была ли нажата одна из этих клавиш. По умолчанию тайм-аут escape-последовательности и тайм-аут отображенной последовательности контролируются настройкой timeoutlen , которая по умолчанию равна 1000 мс. Однако vim позволяет независимо устанавливать тайм-аут escape-последовательности с помощью ttimeoutlen . (Также установите ttimeout если вы хотите, чтобы он вступил в силу, даже если timeout выключен.) Если вы не хотите вводить escape-последовательности вручную или если вы используете модем со скоростью 110 бод, у вас не должно быть проблем с уменьшением времени ожидания escape-последовательности. Например, используйте :set ttimeoutlen=100 чтобы установить время ожидания escape-последовательности равным 100 мс. Вы также можете отключить распознавание escape-последовательностей в режиме вставки, используя :set noesckeys .

1

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

Оказалось, что это действительно была проблема характера ESC, но другая; Я управлял vim внутри tmux. Я решил проверить переменную окружения "TERM", и она была установлена на "screen". Изменение настройки TERM на «xterm-color» (или что-либо подходящее для вашей системы) привело к исчезновению проблемы зависания vim.

Не уверен, что это применимо к вашей ситуации, но, учитывая, что поиск этой проблемы оказался полезен, ответ mark4o в топ-результатах поиска решил добавить эту потенциальную ситуацию и для других.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .