Задержка перед тем, как «O» откроет новую строку?

82

Я заметил, что иногда, когда я использую O (заглавную «о») для создания новой строки и перехода в режим вставки, происходит небольшая задержка, прежде чем что-либо произойдет.

Это обычное дело? Есть ли способ его изменить?

Оба :map Oи :imap Oпоказывают «Сопоставление не найдено», так что я не думаю, что это странное сопоставление.

Дэвид Волевер
источник
Согласитесь насчет superuser.com: возможно, это связано с подсветкой синтаксиса при пересчете форматирования?
monojohnny
4
Пожалуйста, не используйте теги вроде «принадлежит суперпользователю». Теги не предназначены для того, чтобы вы могли выразить свое мнение - см. Meta.stackexchange.com/questions/36819/… . Если вы считаете, что он принадлежит к SU, проголосуйте за его перенос.
Меня поправили. Я больше не буду использовать эти теги. Я все еще думаю, что этот очень хороший вопрос относится к категории SU, и надеюсь найти его там.
jjclarkson 01
Да, извините - вы правы. Это должно быть на SU. Есть ли быстрая и простая кнопка, которую я могу использовать для ее переноса (и ответов?)
Дэвид Волевер, 01

Ответы:

92

Это потому, что 'esckeys'опция включена ( nocompatibleкак я только что обнаружил). Когда вы нажимаете ^[O, происходит небольшая задержка, поскольку он определяет, используете ли вы стрелку / функциональную клавишу или вы просто имели в виду эти две клавиши последовательно.

Одно из решений - отключить эту опцию и отказаться от клавиш со стрелками в режиме вставки.
Другой - установить 'timeoutlen'значение менее 1000, может быть, 100 (но будьте осторожны с медленными соединениями).
Другой - использовать ^Cвместо выхода ^[из режима вставки.

Джош Ли
источник
Хорошо, спасибо! Кроме того, для всех, кто может это читать: перед выключением проверьте страницу справки 'esckeys'- это то, что позволяет вам использовать, например, клавиши со стрелками в режиме вставки. Настройка 'timeoutlen'мне понравилась.
Дэвид Волевер
3
Также ttimeoutlenможно установить тайм-аут только для кодов клавиш. See vim's:help ttimeoutlen
k107
1
У меня все еще задержка даже после :set noesckeysили :set timeout timeoutlen=1000 ttimeoutlen=100... Есть идеи? (Cygwin, VIM скомпилирован из исходников)
Ичуань Ван
1
У меня отлично сработало с: set timeout timeoutlen = 3000 ttimeoutlen = 100 (как указано в справке vim). Простая установка для timeoutlen небольшого значения была плохой идеей - некоторые сопоставления перестали работать.
jkff
Я не понимаю. Когда этот параметр 'esckeys'включен, почему я не могу ввести последовательность <esc>[Aв режиме вставки, чтобы переместить курсор вверх?
Цянь
3

Это произойдет, если вы нажмете «O» сразу после клавиши Escape, верно? Я всегда предполагал, что это произошло из-за того, что драйвер терминала немного ждал, чтобы увидеть, собираетесь ли вы выполнить escape-последовательность.

Шон
источник
0

Подозреваю, что это когда нужно записать файл подкачки на диск. Убедитесь, что вы запускаете vim на компьютере с быстрым доступом к диску; если вам нужно использовать общую файловую систему, вы можете попробовать переместить файл подкачки, используя

:set directory=/path/to/local/dir
Питер
источник
Второе - на работе наши домашние каталоги смонтированы по NFS, и я часто вижу такую ​​задержку.
Cascabel
... конечно, если это только для O, а не o, это, безусловно, вещь с escape-последовательностью, как говорит jleedev!
Cascabel
1
Что ж, хотя этот ответ напрямую не касается OP, я считаю, что он все еще актуален. Не могу согласиться с человеком, проголосовавшим против.
Джеффри Хосе
Это был не ответ на проблему OP, а хорошая теория и поучительное объяснение. Благодаря!
supervacuo