64

Переключение в режим вставки в Vim и из него больше не происходит мгновенно, так как я использую tmux. После нажатия клавиши Esc в режиме вставки требуется значительное время, чтобы фактически выйти из режима вставки. После нажатия клавиши Esc и любой другой клавиши после этого происходит немедленное переключение, и выполняется команда для клавиши, нажатой после клавиши Esc . Есть идеи, что может вызвать это?

Конфигурация Vim не является проблемой, поскольку задержка не возникает, когда я запускаю Vim вне tmux, так что это, вероятно, как-то связано с tmux. Я использую Gnome-терминал, кстати.

Также стоит отметить, что, похоже, я не могу определить привязки клавиш в tmux для Esc, мой план состоял в том, чтобы привязать Esc к:

bind Escape send-keys ^[

Увы, кажется, что привязка к Esc для tmux не работает. Та же проблема возникает и на экране.

4 ответа4

118

После просмотра справочных страниц оказывается, что у tmux есть возможность для этого. Следующее в ~/.tmux.conf исправляет проблему задержки:

 set -sg escape-time 0

Вы должны перезапустить сервер tmux или перезагрузить конфигурацию, чтобы это вступило в силу. Для этого выполните source-file ~/.tmux.conf из командной строки tmux.

3

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

Проблема: режим vi в bash имеет задержку при переключении из режима вставки в командный режим

Решение: В вашем файле ~/.inputrc добавьте set keyseq-timeout n где n - это какое-то низкое значение больше 0. n умолчанию 500 мс, что и является причиной задержки. Смотрите документацию здесь.

Кроме того, если вы хотите узнать, в каком режиме вы находитесь, посмотрите на вилку Дилана Кали.

1

Как видно из заголовка Screen, здесь есть решение для исправления поведения клавиши Escape в GNU Screen. (Взято отсюда.)

добавлять

maptimeout 5

в конфигурационный файл .screenrc .

1

Похоже, вы используете отображение, которое начинается с ESC. Когда вы нажимаете ESC, vim должен подождать, чтобы увидеть, будет ли следующая клавиша в отображении. Если это не так, он может немедленно продолжить.

Конфигурация vim может зависеть от терминала, поэтому тот факт, что это не происходит вне tmux, не имеет большого значения. Vim может запросить переменную среды $TERM и выбрать другую конфигурацию в зависимости от ее значения.

Поскольку gnome-терминал использует AFAIK, xterm в качестве значения переменной $TERM , а tmux использует screen , я бы просмотрел все ваши файлы конфигурации vim на предмет настроек, которые используются только в том случае, если переменная $TERM равна screen . Я предполагаю, что какой-то конфигурационный файл vim в вашей системе устанавливает сопоставления для обработки клавиш со стрелками (те, которые начинаются с символа ESC ), когда терминал находится на screen .

Вы можете проверить это, временно изменив переменную $TERM в tmux перед запуском vim. Если ваша оболочка bash, вызовите vim как

TERM=xterm vim

в tmux и посмотрим, не исчезнет ли проблема. Вы не можете использовать это как исправление, так как могут быть различия между терминальными возможностями tmux и xterm, и вы можете столкнуться с некоторыми проблемами.

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