Невелика затримка при переключенні режимів у vim за допомогою tmux або екрана


68

Перехід до режиму вставки та з нього у Vim більше не миттєвий, оскільки я використовую tmux. Після натискання Escв режимі вставки потрібен помітний проміжок часу, щоб фактично вийти з режиму вставки. Після натискання Escта будь-якої іншої клавіші після цього перемикач відбувається негайно, і команда для натискання клавіші Escвиконується. Будь-яка ідея, що може спричинити це?

Конфігурація Vim не є проблемою, оскільки затримка не виникає, коли я запускаю Vim поза tmux, тому це, мабуть, якось пов’язано з tmux. Я використовую gnome-terminal btw.

Також варто зазначити, що, здається, я не можу визначити ключові прив'язки в tmux для Esc, мій план полягав у тому, Escщоб:

bind Escape send-keys ^[

На жаль, здається, що що-небудь прив'язування до Esctmux не працює. Ця ж проблема виникає і на екрані.

Відповіді:


122

Після орання сторінок man виявляється, що tmux має для цього можливість. Далі у ~/.tmux.confвирішенні проблеми із затримкою:

 set -sg escape-time 0

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


2
Де ти це знайшов? Я ніде не можу знайти час втечі man tmux, і команда не працює для мене.
djeikyb

Я підозрюю, він доступний лише у версії для розробки. Отримати його можна тут: github.com/ThomasAdam/tmux
Ton van den Heuvel

4
Мені довелося використовувати tmux kill-сервер, перш ніж ця настройка працювала на мене. Дякую!
Сем

1
Це змушує мене побажати, щоб я міг дати вам 10 грошей. Виявив це через годину бойових таймаутів у vim. Дякую!
мальвім

1
@MichaelBrown, я теж роблю, і все ще потрапив у цю проблему. Це не має значення, адже той самий код ключа надсилається на емулятор терміналу незалежно від того, натискаєте ви клавішу escape або ^ [.
Тон ван ден Хевель

4

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

Проблема: режим vi в баші має затримку при переході з режиму вставки в командний режим

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

Крім того, якщо ви хочете мати змогу сказати, в якому режимі ви перебуваєте, перегляньте вила нападника Ділана Калі .


що дуже корисно, я налаштував це на це, 0.01і тепер це приємно набагато швидше. Дякую!

До нього також можна додати, /etc/inputrcщоб він став доступним для всіх користувачів.

1

Здається, ви використовуєте відображення, яке починається з ESC. Коли ви натискаєте ESC, vim повинен чекати, щоб побачити, чи наступна клавіша є ключовою у відображенні. Якщо його немає, він може негайно продовжуватись.

Конфігурація vim може залежати від терміналу, тому той факт, що вона не відбувається поза tmux, не означає багато. Vim може запитувати $TERMзмінну середовища і вибирати різні конфігурації залежно від її значення.

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

Ви можете перевірити його, тимчасово змінивши $TERMзмінну в tmux перед запуском vim. Якщо ваша оболонка баш, зателефонуйте vim як

TERM=xterm vim

в tmux і перевірте, чи проблема не зникає. Ти не можеш використовувати це як виправлення, оскільки можуть бути відмінності між термінальними можливостями tmux і xterm, і ти можеш зіткнутися з деякими проблемами.


Тут є кілька хороших вказівників. Я використовую bash, але, на жаль TERM=xterm vim, не виправив проблему. Мені доведеться копати трохи глибше.
Тон ван ден Хевель

1

Як зазначається в заголовку Екран, ось рішення для виправлення поведінки клавіші Escape в GNU Screen. (Взято звідси .)

Додайте

maptimeout 5

для .screenrcналаштування файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.