ALT + стрелка, перемещающаяся между словами в zsh и iTerm2

19

Я вошел в систему на одном из серверов хостинг-провайдера и заметил, что ALT + влево и ALT + вправо перемещаются между словами в приглашении оболочки в GNU Screen.

Какую привязку клавиш мне нужно настроить и где можно получить такое поведение для моей локальной OS X zsh, работающей в iTerm2?

Микко Охтамаа
источник
Людям, интересующимся этим вопросом, также может быть интересно узнать, что зш-слова - это не слова бэша. FOO=BARэто одно слово в zsh и 2 слова в bash. Точно так же, если вы установите курсор в конец foo --barи выполните alt + backspace, в bash у вас будет, foo --а в zsh у вас будет foo . Zsh добавляет много функций в bash, но он также имеет множество безумных значений по умолчанию для переопределения.
weberc2

Ответы:

28

Я нашел решение здесь: https://coderwall.com/p/h6yfda . Скопирует наиболее важные его части на случай, если ссылка отключится.

  1. Перейдите в Настройки, Профиль, Ключи.
  2. Установите левую клавишу to, чтобы действовать в качестве escape-символа.
  3. Найдите текущий ярлык для ⌥ ← или создайте новый, со следующими настройками:
    • Сочетание клавиш: ⌥ ←
    • Действие: отправить Escape-последовательность
    • Esc +: B
  4. повторите для сочетания клавиш ⌥ → со следующими настройками:
    • Сочетание клавиш: ⌥ →
    • Действие: отправить Escape-последовательность
    • Esc +: F
Уиллингтон Вега
источник
1
Стоит отметить, что он относится только к одному конкретному эмулятору терминала, а не к zsh.
Привет-ангел
6

Вы ищете ключевые слова backward-wordи forward-word. Поэтому, если вы находитесь в оболочке, в которой не работают сочетания клавиш, попробуйте bindkey -L | grep backward-wordпроверить, настроены ли они вообще. Больше информации об этом в zshzle (1) .

Вы можете вручную установить привязку клавиш, набрав что-то вроде этого:

bindkey ' Ctrl+ v Alt+ Right' forward-word

bindkey ' Ctrl+ v Alt+ Left' обратное слово

У меня также были некоторые проблемы с сочетаниями клавиш, и проблема почти всегда заключалась в том, что ключ Option / Alt отправлял что-то отличное от ожидаемого мета-выхода.

Себастьян Штумпф
источник
Вы также можете использовать emacs-forward-wordи emacs-backward-word. Разница в том, что вы прыгаете вперед до конца слова и назад к началу слова вместо того, чтобы прыгать всегда в начале слова.
Аалекс Габи
Это самое надежное и чистое решение. Он может адаптироваться к различным типам сопоставления клавиш и / или ко всем видам комбинаций ssh-tmux-zsh. Другие решения, которые включают жестко запрограммированную escape-последовательность, решают только некоторые случаи в какой-то конкретной системе.
HKTonyLee
3

Я не могу говорить за iTerm, но вот те сочетания клавиш, которые я использовал для решения этой проблемы в терминале GNOME на Fedora 19 с ZSH 5.0.7 и Oh-my-zsh:

bindkey "\e[1;3C" forward-word
bindkey "\e[1;3D" backward-word

где \e== escape-key-sequence (как описано в разделе 4.1.1 )

и [== O(заглавные O; как описано в разделе 4.2.1 ), в некоторых случаях. Например, в соответствии с tmuxэтой заменой мне необходимо, однако без tmuxэтого не требуется никакой замены и [==[

Коды клавиш для последовательности можно получить, используя catи нажимая нужную последовательность. Например, результаты нажатия <Alt+Right>должны быть интерпретированы так:

$ cat
^[[1;3C

^[== \e== Последовательность управляющих клавиш

[== [без tmuxИЛИ [== O(заглавные o) сtmux

1;3 == Я не уверен насчет этого, но это должно логически означать <Alt>

C == Клавиша со стрелкой вправо

Затем эта последовательность передается bindkeyв ~/.zshrcфайле для сохранения в качестве первого аргумента и связывается , что означает, что нажатие клавиши в первом аргументе будет выполнять определенную команду редактора (или виджет в терминах zsh) для виджета, который в первом строка приведенного выше примера forward-word.

После ~/.zshrcтого, как эти две команды будут добавлены к нему, он должен быть получен с помощью:

$ source ~/.zshrc

Теперь одна неприятность в моей системе состоит в том, что эта конкретная комбинация заставляла эмулятор терминала издавать звуковой сигнал каждый раз при выполнении команды, это я исправил, отключив

'Edit'->'Profile Preferences'->'Terminal Bell' флажок.

rivanov
источник
1

Что лучше всего помогло мне сделать навигацию в командной строке iTerm2 более интуитивно понятной для меня (я молодой человек, который не вырос в командной строке, но я провел много времени в текстовых редакторах и IDE). чтобы:

  • Зайдите в Настройки -> Профиль -> Ключи
  • Под списком Key Mappings есть поле для добавления / удаления или загрузки пресетов (комбинированное окно)
  • Выберите Natural Text Editingопцию в выпадающем меню Presets.

По умолчанию ключи редактора более стандартны, и мне не нужно изменять каждую опцию отдельно.

loganjones16
источник
0

Я предлагаю вам использовать zkbdдля настройки сочетаний клавиш. Я использую его и Alt+ Left/ Alt+ Rightотлично работает на iTerm2. Подробности zshcontrib(1)смотрите на zkbd.

Даниэль Серодио
источник