
Я использую MAC и пытаюсь найти сочетания клавиш для ZSH, работающего на Iterm2.
Когда я набираю bindkey в оболочке, я вижу (среди прочих сопоставлений) следующее:
"^[b" backward-word
"^[f" forward-word
Я знаю, что ^ — это клавиша Control. Но что, если я нажму Ctrl + [ + f, он не перейдет ни на одно слово вперед?
Что я упускаю?
решение1
^
обычно это control, но ^[
на самом деле означает Escape или Alt (или meta, если вам нравится emacs).
Таким образом, вы можете нажать Escbили Escfдля этих комбинаций клавиш.
По умолчанию Alt не работает на терминалах Mac, но в iTerm2 есть настройка: «Option действует как [ ] Normal [ ] Meta [ ] +Esc». Вам нужно +Esc.
решение2
На самом деле ^[
это клавиша Alt. Так что в вашем случае терминал (Iterm2) использует Alt + b и Alt + f для перехода вперед и назад на слово. Это контролируется вашим терминалом и не имеет ничего общего с zsh.
решение3
Расширитьмрботвечать:
Действительно, ^[b
это ESC+ bили ( Meta/Alt+ b). Вы можете отобразить символ буквально, предварив его Ctrl+ v. В этом случае вы увидите следующее:
Ctrl+ v Ctrl+b
^B
Ctrl+ v Meta+b
^[b
Ctrl+v ESC b
^[b
Кроме того, в руководстве zsh вы найдете:
backward-word (ESC-B ESC-b) (unbound) (unbound)
Move to the beginning of the previous word.
и аналогично для forward-word
:
forward-word (ESC-F ESC-f) (unbound) (unbound)
Move to the beginning of the next word.
решение4
Эта ^
нотация обычно используется в мире GNU для управляющих символов, где ^a
Ctrl-A (ASCII 1, где A — это ASCII 65). Другими словами, это сокращение для «использовать символ 64 слота перед этим».
Ключ ESC
— ASCII 27, который находится на 64 шага раньше [
, следовательно, ^[
является сокращением от ESC.
В редакторе GNU Emacs использовались несколько клавиш-модификаторов: CTRL, META и др. Например, CTRL-f перемещает курсор на символ вперед, а META-f перемещает курсор на слово вперед.
Для того чтобы приспособиться к многочисленным клавиатурам без клавиши META, принято соглашение "ESC означает, что следующий символ следует считать нажатым с клавишей META". Поэтому в GNU Emacs нажатие ESC-f перемещает курсор на слово вперед.
Обратите внимание, что в наши дни это очень редко Ctrl-[
дает символ ESC, но он может скрываться в какой-то другой комбинации Ctrl. Например, он ^^
все еще используется в сеансах telnet для выхода в командный режим, поэтому полезно иметь возможность его найти.