Ключ ESC викликає невелику затримку терміналу через поведінку Alt +


67

Моя установка терміналу - gnome-terminal + tmux + zsh з прив’язками vi.

У таких програмах, як vim або навіть в режимі редагування vi командного рядка zsh, мені потрібно часто натискати ESCклавішу, але перед тим, як вплинуть дії цього ключа, є невелика затримка. Див. Екран GNU робить клавішу Vim ESC повільною

Після деяких експериментів я виявив, що натискання ESCклавіші та негайно інша клавіша (скажімо b) має такий же ефект, як і натискання Alt+b. Я не знаю, чому це так (мабуть, із застарілих причин, коли його не було Alt? Не знаю). У будь-якому випадку у мене є дві Altклавіші, і я не хочу, щоб така поведінка була з моїм ESCключем. Я спробував C+[і з тією ж проблемою, що і з цим.

Я не впевнений, хто несе відповідальність за це, gnome-terminal або tmux або саму мою ОС (Ubuntu Natty). Будь-які ідеї щодо вирішення цього питання були б чудовими.

Оновлення : я перевірив без tmux на іншому терміналі (LXTerminal) і затримка там також присутня.


1
Я не міг зрозуміти, чому мій вим діяв дивно. Це питання змусило мене згадати, що я тільки почав використовувати його в екрані. Ти врятував мій розум.
пабо

Відповіді:


111

Ось фактичне виправлення. Додайте до .tmux.conf:

set -s escape-time 0

4
Блискуче, дякую! Була затримка виходу з режиму вставки у vim і не дуже думала, що це може бути заважати tmux. Це і зробило трюк
діїрізи

7
Як вже згадувалося в superuser.com/questions/252214/…, я повинен був зробити tmux kill-serverце для вступу в силу.
PhilT

Для тих, хто зайшов на цю сторінку, намагаючись зрозуміти, чому виникає затримка при переході з режиму вставки в командний режим під час використання режиму vi в bash, див. Superuser.com/a/1161871/236677
Квас

3
Ви можете перезавантажити файл конфігурації, відкривши командний рядок всередині tmux за допомогою tmux-prefix(за замовчуванням Ctrl+b), після чого :ввівши source-file $HOME/.tmux.conf.
Фолфі

7

Затримка викликана вхідними процедурами, які, можливо, повинні вирішити, натискали чи не функціональну клавішу. Для цього програма введення запускає таймер кожного разу, коли він зчитується символом ESC. Символи, які зчитуються з входу до закінчення таймера (скажімо, десяту частину секунди), потім інтерпретуються як послідовність ESC функціональної клавіші, і ця послідовність ESC буде порівнюватися з відомими рядками послідовностей ESC від terminfo або база даних термічної капи (залежить від того, які підпрограми низького рівня використовуються).

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

Щодо вашого питання щодо поведінки ESC a= Meta a:

Мета-клавіші були доступні не для всіх клавіатур. В якості вирішення часто дозволялося використовувати клавішу ESC, яку потрібно натиснути перед іншою клавішею.


Дякую за пояснення ktf. Затримки немає в gvim, тільки в терміналі (я перевірив без tmux і затримка все ще є).
Шрікант Шарат

gvim не страждає від цієї проблеми, оскільки отримує інформацію, яка клавіша була натиснута з сервера X11 (тому вона не повинна аналізувати послідовності ESC).
ktf

Гаразд, тому мені потрібно змусити мій термін gnome поводитись так само.
Шрікант Шарат

gnome-термінал не є проблемою - описана проблема стосується лише програм, що працюють на терміналі (або в емуляції терміналу) і має розбирати функціональні клавіші. Ви відчуєте таку ж поведінку, якщо приміряєте, наприклад, xterm або KDE-термінал.
ktf

2
"Мета-клавіші були доступні не для всіх клавіатур. У якості вирішення часто дозволялося використовувати клавішу ESC, яку потрібно натиснути перед іншою клавішею." Можливо, навіть передбачуючи це, ttys часто мав лише семибітні інтерфейси даних; не було восьмого "біта мета", тому вам довелося відправити ESC для Meta. І на сьогодні UTF-8 широко поширений, тому навіть при восьмибітових з'єднаннях ви не можете використовувати високий біт для Meta.
Кріс Пейдж

3

Хоча це може не вирішити безпосередньо вашу проблему, я виявив, що можу використовувати <Ctrl> cдля виходу з режиму вставки. Це також можна використовувати для виходу з екрана прокрутки tmux (який можна викликати за допомогою <leader> PgUP)


3
Я б не рекомендував використовувати <C-c>для виходу з режиму вставки регулярне використання, оскільки він не запускає InsertLeaveавтокоманду, яку можуть переглядати деякі плагіни. Див :h i_CTRL-C.
Шрікант Шарат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.