Як я можу уникнути конфліктів у вкладках zsh?


2

Я хотів би прив’язати функцію до CtrlgCtrlbzsh.

gb-widget() { echo "geebee" }
zle     -N     gb-widget
bindkey '^G^B' gb-widget

Це не працює CtrlgCtrlb, але це чудово працює з іншими довільними прив'язками клавіш ( CtrlgCtrlxнаприклад,). Можливо, проблема полягає в тому, що Ctrlbвже є псевдонімом backward-char:

$ bindkey | grep -F '^B'
"^B" backward-char
"^G^B" gb-widget

Я хотів би зберегти цей emacs Ctrlbобов'язковим. Чи є спосіб я змусити цю роботу?


Це добре працює на моїй машині. Ви починали з пустого конфігурації ( zsh -fбез жодного d'oh-my-zsh тощо)? Ви пробували з іншим термінальним емулятором? xterm та urxvt, як видно, працюють добре.
mpy

Це зараз добре працює і для мене. Я не впевнений, яка початкова проблема; якщо я зможу його відтворити, я оновлю це питання, щоб це відобразити.
Сасгоріла

Гаразд, зараз ^G^Bпрацює правильно, і я бачу проблему із ^G^Cярликом. Я не бачу жодної суперечливої ^Cярлики, тому, мабуть, це була червона оселедець. В ^G^Cзберігається з zsh -f. На даний момент я загадкований тим, що призводить до виходу з ладу деяких комбінацій клавіш, поки працюють подібні.
Сасгоріла

Просто спекулюю: Можливо, CTRL-Cце не працює, тому що зазвичай посилає SIGINTсигнал.
mpy

Відповіді:


0

Причина виникнення цієї проблеми іноді працює / іноді не працює $KEYTIMEOUT.

Коли ви натискаєте клавішу, яка є частиною послідовності з декількома символами в поточній мапі $KEYTIMEOUTклавіш , zsh чекає мілісекунд, щоб ви натиснули другу клавішу. За замовчуванням встановлено значення 40. Це задокументовано в посібнику zsh .

Отже, якщо ви натиснете ^G, у вас є 40 мс для натискання клавіші ^B, інакше два натискання клавіш трактуються як введені окремо, а не як частина однієї послідовності.

Ви, очевидно, можете змінити значення $KEYTIMEOUT, наприклад, зробити його довше, щоб у вас було більше часу для натискання другої клавіші.

(Зверніть увагу, що це може мати ефекти натискання, наприклад, якщо ви перебуваєте у режимі vi вставлення та намагаєтесь натиснути, ESCщоб перейти до командного режиму vi, оболонка буде чекати $KEYTIMEOUTмілісекунд, тому що існують багатосимвольні клавіші, які починаються з ESC- особливо стрілка ключі!)

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