iTerm 2: Как настроить сочетания клавиш для перехода к началу / концу строки?


396

Я вижу, что Ctrl+ left/ rightпереходит к началу / концу строки. Как изменить это на Cmd+ left/ right arrow?

Для того, чтобы получить Alt+ left/ right arrowправильно работать для прыжков, следуйте этой статье .



1
Если вы хотите, чтобы эти ярлыки также работали в VIM, посмотрите этот ответ: stackoverflow.com/a/9611698/991068
Разван Григоре

Ответы:


737

Добавьте в iTerm2 следующие сочетания клавиш профиля

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Вот картинка для тех, кому это нужно

iTerm добавить ключевые визуальные


3
Вы знаете, что такое код / ​​последовательность для Command + Delete? (уберите подсказку)
Стивен Лу

10
Я ответил на мой первый комментарий в другом месте, в основном шестнадцатеричный код 0x15 дает Ctrl + U, который очищает строку. Однако я нахожу 0x01 Ctrl + A, чтобы мешать использованию Tmux. Поэтому я намереваюсь сопоставить его вместо клавиши Home (та же функциональность, что и Fn + Left на клавиатуре Mac).
Стивен Лу

7
Escape-последовательность для Home - [1 ~, а Escape-последовательность для End - [4 ~
Steven Lu

3
Работает как шарм, потрясающе!
Juto

25
Правильная привязка ⌘← "SEND ESC SEQ" OHдля Home и ⌘→ "SEND ESC SEQ" OFдля End (это прописные буквы, а не нули). Это имитирует фактическое нажатие клавиш Home и End, и, как таковое, будет работать в bash, vim и т. Д.
Timothy Zorn

435

Для перехода между словами и началом / концом строк в iTerm2 выберите одно из двух решений ниже.

1. Простое решение (рекомендуется)

  1. Открыть настройки
  2. Нажмите вкладку «Профиль»
  3. Выберите профиль в списке слева (например, «По умолчанию») и нажмите вкладку «Ключи»
  4. Нажмите внизу «Presets» и выберите «Редактирование естественного текста»

введите описание изображения здесь


2. Назначение клавиш вручную (Дополнительно)

Если вы не хотите использовать предустановку «Редактирование естественного текста», упомянутую выше, вы можете сопоставить нужные вам ключи вручную:

  1. Открыть настройки
  2. Нажмите вкладку «Ключи»
  3. Нажмите на [+]иконку

Теперь вы можете добавить следующие сочетания клавиш:

Переместить курсор на одно слово влево

  • Сочетание клавиш: +
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x1b 0x62

введите описание изображения здесь

Переместить курсор на одно слово вправо

  • Сочетание клавиш: +
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x1b 0x66

Переместить курсор в начало строки

  • Сочетание клавиш: +
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x01

Переместить курсор в конец строки

  • Сочетание клавиш: +
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x05

Удалить слово

  • Сочетание клавиш: +←Delete
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x1b 0x08

Удалить строку

  • Сочетание клавиш: +←Delete
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x15

Отменить

  • Сочетание клавиш: +z
  • Действие: Отправить шестнадцатеричный код
  • Код: 0x1f

Не забудьте удалить предыдущие привязки :

  • Откройте вкладку «Профили»
  • Нажмите на вкладку «Ключи»
  • Удалить сопоставления для сочетаний клавиш + и +

2
Это хорошо сработало для меня в iTerm2 и было очень легко понять, спасибо!
Natetronn

3
Просто поясняю, что делают оригинальные привязки для ⌥ ←? Я вижу это Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Было бы полезно знать, если бы люди не хотели это убрать.
августа

5
Переход к началу и концу строки у меня не работает с помощью zsh. Использование «шестнадцатеричного кода» «0x01» / «0x05», как подсказывает главный ответ, сработало для меня.
Флип

2
Переход к началу и концу строки не работает для меня тоже. Топ ответ сработал.
Hisabimbola

3
Есть ли у iTerm способ объединить их в предустановку, которую мы можем просто загрузить? Кажется, раздражает вводить вручную, но это сработало для меня и было здорово. Спасибо за это!
Август

259

Я вижу, что уже есть много хороших ответов, но это должно обеспечить максимально возможную функциональность OSX больше, чем просто ваша оболочка. Я проверил, что это работает в сессиях ZSH, Bash, node, python -i, iex и irb / pry (используя rb-readline gem для readline, но должно работать для всех).

Откройте настройки iTerm + ,и перейдите на Profilesвкладку ( Keysвкладку можно использовать, но добавление привязки клавиш в свой профиль позволяет сохранить профиль и синхронизировать его с несколькими компьютерами) и вложенную keysвкладку и ввести следующее:

Удалить все символы слева от курсора

+ ←DeleteОтправить шестнадцатеричные коды:

0x15Более совместимо, но функциональность иногда заключается в удалении всей строки, а не только символов слева от курсора. Я лично использую это, а затем перезаписываю свой zsh bindkey для ^Uудаления только содержимого слева от курсора (см. Ниже).

или

0x18 0x7fМенее совместимый, не работает в узле и не будет работать в zsh по умолчанию, см. Ниже, чтобы исправить zsh (bash / irb / pry должно подойти), выполняет желаемую функциональность, когда работает.

Удалить все символы справа от курсора

+ fn+ ←Deleteили + Delete→Отправить шестнадцатеричные коды:0x0b

Удалить одно слово слева от курсора

+ ←DeleteОтправить шестнадцатеричные коды:

0x1b 0x08 Перерывы в IEX в Elixir, кажется, работают нормально везде

или

0x17 Работает везде, но не останавливается на нормальных разрывах слов в IRB и вместо этого будет удалять, пока не увидит буквальное пространство.

Удалить одно слово справа от курсора

+ fn←Deleteили + Delete→Отправить шестнадцатеричные коды:0x1b 0x64

Переместить курсор в начало строки

+ Отправить шестнадцатеричные коды:0x01

Переместить курсор в конец строки

+ Отправить шестнадцатеричные коды:0x05

Переместить курсор на одно слово влево

+ Отправить шестнадцатеричные коды:0x1b 0x62

Переместить курсор на одно слово вправо

+ Отправить шестнадцатеричные коды:0x1b 0x66

Отменить

+ zОтправить шестнадцатеричные коды:0x1f

Повторить обычно не привязаны в bash, zsh или readline, поэтому мы можем установить для него неиспользуемый шестнадцатеричный код, который мы затем можем исправить в zsh

+ + Zили + yОтправить шестнадцатеричные коды:0x18 0x1f

Теперь, как исправить то, что не работает

Для zsh вы можете установить привязку для еще не функционирующих + ←Deleteи + + Z/ + y, выполнив:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

Я не могу найти решение для добавления повторов в bash или readline, поэтому, если кто-то знает решение для любого из них, пожалуйста, прокомментируйте ниже, и я постараюсь добавить их.

Для тех, кто ищет таблицу соответствия о том, как преобразовать последовательности ключей в шестнадцатеричные, я нахожу эту таблицу очень полезной.


2
Это действительно полезно, имеет большое значение! Я хотел бы отметить, что некоторые люди могут запутаться $перед echo(просто удалить?). Кроме этого, это прекрасно. Спасибо.
Эдмундо

1
@Christophe Похоже, что связывание клавиш там, как и должно быть. Либо вы допустили ошибку при добавлении шестнадцатеричных значений в, либо перепрограммирование клавиш для обратного слова перезаписывается. Запустите, bindkey | grep "\^\[b"и он скажет вам, если что-то еще перезаписывает его после того, как он был установлен. Это должно только вернуться #=> "^[b" backward-word. Если он будет перезаписан, вам нужно будет найти, где он будет перезаписан, и удалить его. Если это невозможно, вы можете запустить echo 'bindkey "^[b" backward-word' >> ~/.zshrcего, добавив его в последнюю строчку .zshrc, затем перезапустите iTerm, и он должен работать
Travis

2
@Christophe проверить keysвкладку в Iterm настройках , чтобы увидеть , если это также отображение + к чему - то. Если так, удалите это. Вы можете проверить bправильность работы вашего устройства, быстро нажав и escотпустив, а затем нажав b. Это должно прыгнуть слово влево. Кроме того, вы можете сопоставить + с гекс 0x1b 0x42 или 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Я проверил, что оба из них работают для меня. Я действительно думаю, что вы + перезаписаны в iTerm, либо на profile keysвкладке, либо на keysвкладке.
Трэвис

3
Удивительно! Только что узнал об отменах и повторных привязках отсюда.
Экброди

3
Я сделал это вручную, и я подумал, почему я не могу импортировать профиль для этого? Затем я создал GabLeRoux / iterm2-macos-dynamic-profile на основе этих инструкций. Это работает безупречно, спасибо 🍻
GabLeRoux

48

Следуйте инструкциям, перечисленным выше, чтобы настроить ключевые параметры в iterm2 .

  1. Создать новый ярлык
  2. Выберите «Отправить escape-последовательность» в качестве действия
  3. Затем, чтобы установить cmd-left , в тексте ниже это:
    • Введите [Hдля начала строки
      ИЛИ
    • Введите [Fдля конца строки

1
F пропускает только одно слово в моем iterm2
Матиас

1
ITerm => Настройки => Ключи
pfrank

Люблю это! другие решения не работали для меня. Я часами расстраиваюсь, что не могу использовать ctrl + a и ctrl + e в iterm2. Но я не хотел бросать рыбу за это. Это полностью работает, спасибо!
FLY

Другие решения также не работали для меня, но это сработало.
Брахам Снайдер

42

В iTerm 3.0.12 вы можете переключиться на Natural Text Editingпресет:

введите описание изображения здесь

iTerm → Настройки → Профили → Ключи

Предупреждение Поскольку это предустановка, она может переопределять ключи, которые вы связали ранее. Поэтому лучше сохранить текущие привязки клавиш перед применением пресета.


2
Не могли бы вы более подробно изложить свой ответ? Как в том, что этот пресет включает и может перезаписать?
Carles Alcolea

Спасибо за ответ. Также пробили в нем, вероятно , лучше практика , чтобы применить это на свой собственный пользовательский профиль , который , как вы не завинчивания с параметрами по умолчанию и может переключить профиль в качестве естественного редактирования текста «Режим»
авг

29

Для быстрой ссылки на любого, кто хочет перейти к концу строки или началу строки в iTerm2, ссылка выше http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html отмечает, что в iTerm2:

  • Ctrl+A , переходит на начало строки, а
  • Ctrl+ E, прыгает до конца строки.

Почему этот ответ не наверху?
Gangadhar JANNU

1
@GangadharJannu: полностью согласен. Это идет прямо к ответу. Должен быть на вершине.
Catbuilts

10

Я использовал ответ Travis и создал динамический профиль, который вы можете импортировать на основе его инструкций.

GabLeRoux / iterm2-MacOS-динамический профиль

Инструкции находятся в файле readme, и импортировать их намного быстрее, чем добавлять их все вручную. Я сделал это ответом на запрос @ gooli, потому что это было скрыто в комментарии. Надеюсь, вам понравится это 🍻


2
Вернулся сюда год спустя и так счастлив найти это!
elifiner

9

Просто для того, чтобы помочь любому, у кого возникла та же проблема, но в частности с использованием оболочки Zsh с iTerm 2. Оказывается, что Zsh не читает /etc/inputrcправильно , и поэтому не может понять любые привязки клавиш, которые вы установили с помощью настроек!

Чтобы это исправить, вам нужно добавить некоторые привязки клавиш в ваш .zshrcфайл, например:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Обратите внимание на обратную косую черту в приведенном выше примере перед «е», связанная статья не показывает их, поэтому добавляйте их в свой .zshrcфайл при добавлении привязок.


4

Привязки старой моды emacs могут работать в терминалах iterm2 и os x:

Настройки -> Профили -> Ключи (вложенная вкладка в профилях)

  • Set Left/Right option <kbd>⌥</kbd> key acts as +Esc(аналогично терминалу os x)

Это должно позволить alt- fи alt- bдля перемещения слов по словам. (Все еще ctrl- aи ctrl- eвсегда работайте как обычно)

Если установить metaэти старые привязки, они будут работать, пока некоторые привязки iterm2 будут недоступны.


2

Как объясняется здесь , вы можете сделать это с помощью простых шагов:

По умолчанию переходы по словам (опция + → или ←) и удаление слов (опция + возврат) не работают. Чтобы включить их, перейдите к «iTerm → Настройки → Профили → Ключи → Загрузка предустановок ... → Редактирование естественного текста → Стрела! Голова взрывается»


2

Единственные вещи, которые подходят для перехода в начало и конец строки, это

⌘← "SEND ESC SEQ" OH- перейти к началу строки
⌘→ "SEND ESC SEQ" OF- перейти к концу строки


1

bind -p покажет список связанных экранированных ключей в вашей оболочке, что может помочь дать вам больше идей / поисковых терминов.


5
bind -pработает только в оболочках Bourne (bash, sh) для zsh, csh tcsh, use bindkey.
Трэвис


0

Для меня сработала следующая комбинация:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.