Почему vim задерживается на секунду, когда я использую команду 'O' (откройте новую строку выше и вставьте)?

26

Когда я использую большинство команд, они вступают в силу немедленно. Однако, когда я использую Oкоманду, я вижу, что буква «О» заменяет текущий символ примерно на секунду, затем текущий символ возвращается, и новая строка вставляется и открывается.

У меня нет такой проблемы с oкомандой (откройте новую строку ниже и вставьте).

Если это имеет значение, я использую vimиз bash, в терминале Gnome на Ubuntu 10.04.

Мэтью
источник

Ответы:

27

Если предыдущей нажатой клавишей была ESC, то это потому, что существуют клавиши, которые могут генерировать escape-последовательности, начинающиеся с ESC O. Например, в зависимости от режима клавиши курсора клавиша со стрелкой вверх может генерировать ESC O A. escape-последовательность.

Если он видит частичную escape-последовательность, vim будет ждать короткое время ожидания, чтобы увидеть, получен ли другой символ, который соответствует одной из escape-последовательностей, определенных для вашего типа терминала. Если нет, он будет обрабатывать символы как отдельные нажатия клавиш. Вы можете проверить это, введя заглавную букву А в ожидании открытия линии, чтобы увидеть, рассматривает ли она ее как стрелку вверх.

Есть некоторые настройки vim, которые можно использовать для управления этим. :set ttimeoutlen=100изменит время ожидания escape-последовательности на 100 мс. :set noesckeysполностью отключит распознавание ключей, отправляющих escape-последовательность в режиме вставки. Кроме того, vi-совместимый режим не будет иметь этой проблемы, потому что esckeys выключен в этом режиме - вот почему vim -u NONEработает.

mark4o
источник
Просто чтобы уточнить, мой «эксперимент» с файлом строки 140 КБ проходил в режиме полного vim с моим стандартным набором плагинов и типов файлов. Я вижу, где вы могли прийти к выводу, что я использовал, -u NONEно у нас все еще нет подтверждения от ОП.
Msw
Вот Это Да! Некоторое время это было немного раздражающим, но я никогда не думал об этом. имеет смысл сейчас. Esc OA действительно работает как стрелка вверх.
Виталий Кушнер
2
:set noesckeysвероятно, это не то, что вам нужно - установите его, а затем нажмите клавиши со стрелками в режиме вставки, даже если вы не планируете их использовать, вы не хотите, чтобы они это делали! noesckeys также не ускоряет работу вне режима вставки. ttimeoutlenэто определенно путь
JonnyRaa