6

По какой-то причине я не могу связать Ctrl-Left Arrow и Ctrl-Right Arrow для перемещения между словами в ZSH после установки oh-my-zsh на моем MacBook Pro.

В iTerm2 мои сочетания клавиш настроены на "Send Escape Sequence" [1; 5D и [1; 5C, которые работали до установки oh-my-zsh.

Я тоже попробовал раскомментировать

bindkey '^[^[[C' emacs-forward-word
bindkey '^[^[[D' emacs-backward-word

в ~/.oh-my-zsh/lib/key-bindings.zsh, также безрезультатно. В обоих сценариях нажатие Ctrl-Left/Right просто отправляет "5D" и "5C" на экран.

TLDR: Кто-нибудь получил Ctrl-Left и Ctrl-Right для перемещения между словами при использовании oh-my-zsh?

4 ответа4

6

Измените ваши строки bindkey на:

bindkey '^[[1;5C' emacs-forward-word
bindkey '^[[1;5D' emacs-backward-word
4

Этот работал для меня:

bindkey "[C" emacs-forward-word   #control left
bindkey "[D" backward-word        #control right

На самом деле, я нажал Control+влево и Control+вправо между "", и это сделало волшебство.

3

Нажмите ^v(Ctrl-v) или cat в zsh shell , а затем key-combinations(Ctrl+left) зависимости от того, что вы хотите использовать, чтобы получить соответствующее значение bindkey. Используйте этот вывод в команде. Это зависит от системы в зависимости от драйвера терминала и т.д.

В моем случае Ctrl-left был ^[O5D . Следовательно, bindkey '^[O5D' backward-word

Если вы хотите сделать один шаг вперед, https://stackoverflow.com/a/8645267/2538943 предоставляет идею обобщения привязок клавиш zsh с помощью автозагрузки cmd autoload zkbd ; zkbd После этого добавьте следующую строку source ~/.zkbd/$TERM-${${DISPLAY:t}:-$VENDOR-$OSTYPE} в свой .zshrc. Отныне вы можете писать это как [[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char . Таким образом, вы можете скопировать один и тот же .zshrc на разные машины.

Дополнительная информация: Питер Стивенсон говорит ...the function keys on your keyboard... It depends a good deal on how your windowing system or terminal driver handles them... Следовательно, лучше проверять все эти привязки клавиш перед запуском любого такого сценария, хотя в большинстве случаев он может не изменяться.

Для подробного понимания связывания клавиш для zsh, проверьте это руководство. http://zsh.sourceforge.net/Guide/zshguide04.html.

Если вы хотите знать, как отображается нажатая клавиша, https://unix.stackexchange.com/questions/116629/how-do-keyboard-input-and-text-output-work/116630#116630

0

Таким образом, ваш эмулятор терминала отправляет одну последовательность CSI (ESC+[+1;5C) для ключа, но вы сказали своей оболочке с помощью команды bindkey отслеживать вход терминала для другой последовательности CSI (ESC+ESC+[+C), а вам интересно, почему это не работает?

Это не работает по очень очевидной причине.

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