iTerm 2: Як встановити комбінації клавіш для переходу до початку / кінця рядка?


395

Я бачу, що Ctrl+ left/ rightпереходить до початку / кінця рядка. Як змінити це на Cmd+ left/ right arrow?

Для того, щоб отримати Alt+ left/ right arrowпрацювати правильно для стрибків слів, дотримуйтесь цієї статті .



1
Якщо ви хочете, щоб і ці ярлики також працювали у VIM, дивіться цю відповідь: stackoverflow.com/a/9611698/991068
Razvan Grigore

Відповіді:


735

Додайте в 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
Послідовність евакуації для дому дорівнює [1 ~, а послідовність евакуації для End закінчується [4 ~
Стівен Лу

3
Працює як шарм, дивовижно!
Juto

25
Правильна прив'язка призначена ⌘← "SEND ESC SEQ" OHдля дому та ⌘→ "SEND ESC SEQ" OFдля кінця (це великі регістри "це не нулі"). Це імітує фактичне натискання клавіш Home та End, і як таке буде працювати в bash, vim тощо.
Тимофій Зорн

433

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

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

  1. Відкрити налаштування
  2. Перейдіть на вкладку «Профіль»
  3. Виберіть профіль у списку зліва (наприклад, "За замовчуванням") та натисніть вкладку "Клавіші"
  4. Клацніть спальний центр "Попередні налаштування" та виберіть "Природне редагування тексту"

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


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. Використання "Hex Code" "0x01" / "0x05", як запропонував верхній відповідь, працювало для мене.
Фліп

2
Перехід до початку та кінця рядка теж не працював для мене. Верхня відповідь спрацювала.
hisabimbola

3
Чи є у iTerm спосіб зв'язати їх у попередньо встановлену програму, яку ми можемо просто завантажити? Здається, це дратує набір вручну, але це працювало для мене і було приголомшливо. Дякую lto!
Август

259

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

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

Видаліть усі символи, що залишилися від курсору

+ ←DeleteНадіслати Hex коди:

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

або

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

Видаліть усі символи праворуч від курсору

+ fn+ ←Deleteабо + Delete→Надіслати шістнадцяткові коди:0x0b

Видаліть одне слово зліва від курсору

+ ←DeleteНадіслати Hex коди:

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(просто видалити його?). Крім цього, це ідеально. Дякую.
edmundo

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 . Я переконався, що обидва працюють на мене. Я дійсно думаю, що у вас i + переписано в iTerm, або у profile keysвкладці чи на keysвкладці.
Тревіс

3
Дивовижний! Щойно дізналися про скасування прив’язок плюс пов'язки Redo звідси.
ecbrodie

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

48

Виконайте вищевказаний підручник для налаштування ключових уподобань у iterm2 .

  1. Створіть нову клавішу швидкого доступу
  2. У якості дії виберіть "Надіслати послідовність втечі"
  3. Потім, щоб встановити cmd-ліворуч , у тексті нижче:
    • Введіть [Hдля початку рядка
      АБО
    • Введіть [Fдля закінчення рядка

1
F скаче лише одне слово в моєму iterm2
Маттіас

1
ITerm => Налаштування => Ключі
pfrank

Люблю це! інші рішення для мене не спрацювали. Я витрачав години засмучений тим, що не можу використовувати ctrl + a та ctrl + e в iterm2. Але я не хотів відмовлятися від риби за це. Це повністю працює спасибі!
FLY

Інші рішення також не спрацювали для мене, але це було.
Брахам Снайдер

42

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

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

iTerm → Налаштування → Профілі → Клавіші

Попередження Оскільки це попередньо встановлена ​​функція, вона може змінювати клавіші, які ви зв'язали раніше. Тому краще зберегти свої поточні прив’язки до клавіш, перш ніж застосовувати попередньо встановлені налаштування.


2
Не могли б ви детальніше пояснити свою відповідь? Як і в тому, що ця пресета включає і може перезаписати?
Карлес Алколія

Дякую за відповідь. Також наголошується, що це, мабуть, найкраща практика застосувати це до власного користувальницького профілю, таким чином, ви не вкручуєтесь за замовчуванням і можете перемикати профіль як "режим" редагування природного тексту
серпень

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

Я використав відповідь Травіса і створив динамічний профіль, який ви можете імпортувати, грунтуючись на його інструкціях.

GabLeRoux / iterm2-macos-dynamic-profile

Інструкції є у ​​readme, і імпортувати це набагато швидше, ніж додати їх уручну. Я відповів на це відповідь на запит @ gooli, оскільки це було приховано в коментарі. Сподіваюся, вам сподобається це 🍻


2
Повернувся сюди через рік і так радий, що знайшов це!
еліфінер

9

Просто для того, щоб допомогти тому, у кого виникає та сама проблема, але спеціально використовується оболонка Zsh з iTerm 2. Виявляється, Zsh не читає /etc/inputrcналежним чином , і тому не розуміє жодних ключових прив’язок, які ви встановили за допомогою налаштувань!

Щоб виправити це, вам потрібно додати до .zshrcфайлу деякі ключові прив’язки , наприклад:

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

Зверніть увагу на зворотні риски в прикладі вище перед "e", пов'язана стаття не відображає їх, тому додайте їх у свій .zshrcфайл, додаючи прив'язки.


4

Старі вкладки emacs моди все ще можуть працювати в iterm2 і os x-терміналі:

Налаштування -> Профілі -> Клавіші (вкладка в профілях)

  • Набір Left/Right option <kbd>⌥</kbd> key acts as +Esc(схожий на ОС x 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працює лише в оболонках Борна (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.