Шукаєте рішення ALT + LeftArrowKey в zsh


130

Нещодавно я перейшов з bash на zsh, проте мені не вистачає моїх Alt+ LeftArrowKeyі Alt+, RightArrowKeyщоб одночасно повертати слово назад і назад.

Прямо зараз, якщо натиснути Alt+, LeftArrowKeyповертаю пару листів і тоді я застряг. Я не піду далі назад, і він не повернеться до кінця рядка з Alt+, RightArrowKeyяк я очікував. Я навіть не можу скористатися клавішами зі стрілками, щоб перейти до кінця рядка, лише до другої до останньої. Неможливо ввести нові символи в рядку або видалити їх дійсно.

Як повернути кохану ярлик назад?

Я на Mac OS X використовую термінал, якщо це важливо.

Відповіді:


243

Запустіть, catпотім натисніть клавіші, щоб побачити коди, які надсилає ярлик.
(Натисніть Ctrl+, Cщоб вбити, catколи ви закінчите.)
Для мене (ubuntu, konsole, xterm) натискання Alt+ надсилає ^[[1;3D, тож я би поставив у свій .zshrc

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

(Насправді я вважаю за краще використовувати Ctrl+ стрілку для переміщення слово за словом, як у звичайному текстовому полі під Windows або Linux gui.)

Пов'язане запитання: Виправте налаштування клавіш (Головна / Кінець / Вставка / Видалення) в .zshrc під час запуску Zsh в емуляторі термінального термінала


15
Ти мій рятівник! На моєму Mac "Alt + <-" дав "^ [b" і -> дав "^ [f", тому я додав їх. Працює як шарм. Ctrl + стрілки зарезервовані для перемикання між настільними комп'ютерами на Mac.
Мадс Ом Ларсен

1
Одне зауваження полягає в тому, що для ctrl + <- кішка звітувала ^[[Dпро мене, тоді як ctrl + v звітувала ^[OD. Пропозиція Ctrl + v спрацювала, але кота - ні. Крім того, ctrl + v повідомляв про те саме, що і для alt + <- і alt + ->. Мені вдалося додати ці два, подивившись на результат кішки та замінивши будь-яке "[[" на "O"
Майк S

10
мій висновок під cat призначений ^[^[[Cдля прямого слова та ^[^[[Dдля зворотного слова, але оновлення для них у .zshrc чомусь не вийшло.
Юнті

2
@Yunti - Введення bindkey "^[^[[D" backward-wordі bindkey "^[^[[C" forward-wordв ~ / .zprofile працювало на мене!
Фернандо Еспіноса

Людина! Врятувало мені життя! Дякую, що поділились!
Жоао Анріке

187

Для всіх, хто використовує iTerm, незалежно від оболонки

Всі запропоновані тут рішення, на мою думку, мають зворотний підхід. Ви, по суті, говорите своїй оболонці прослуховувати певну послідовність esc або іншу прив'язку клавіш, яку ви встановили у своєму терміналі, створюючи проблеми сумісності при переключенні оболонок (якщо ви SSH в іншу оболонку, перейдіть з BASH на ZSH тощо) і втратите деякі, якщо не всі ваші клавіші).

Більшість оболонок мають набір послідовностей за замовчуванням, які попередньо пов'язані. Крім того, хоча вони не на 100% стійкі, вони досить близькі. Таким чином, найпростіший спосіб, який я знайшов, щоб створити прив'язку клавіш для певної дії в оболонці, - це сказати вашій програмі терміналу прив’язати до типових вкладень клавіатури, які відповідають оболонкам.

Я написав стискуюче рішення для отримання вашого терміналу , щоб відповісти як можна ближче до рідного Макінтоша прив'язки тут

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

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

+ Надіслати шістнадцяткові коди:0x1b 0x62

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

+ Надіслати шістнадцяткові коди:0x1b 0x66

І це повинно надати вам бажану поведінку не тільки в ZSH, але і якщо ви SSH на сервер, на якому працює BASH, irb / pry, вузол тощо.


1
У мене виникли проблеми з прийнятим рішенням, тому що я працював нормально, але не irb та інші консолі. Видалення попередніх налаштувань (як у запропонованому профілі iTerm) працює як шарм!
llekn

1
Рішення bindkey видало би набридливий звук помилок на Mac. Це має бути правильним способом зробити це.
Weishi Zeng

@Lev Ймовірно, тому що або ваша оболонка не відображена в конфігурації за замовчуванням. Запустіть, bindkey | grep forward-wordви повинні побачити "^[f" forward-wordповернені, але якщо цього не зробити, у вас є 2 варіанти. картографуйте одного з повернених інших або додайте "^[f" forward-wordдо свого .zshrc.
Тревіс

Зазначу, це, "^[f"здається, є найбільш послідовно використовуваним прив'язкою для forward-wordвикористовуваних через оболонки, і єдиний набір за замовчуванням у моїй версії bash.
Тревіс

Якось він працював із командною кнопкою замість опції. Спасибі людина. :)
Vaibhav Jain

72

Додавши наступне до ~ / .zshrc працював на мене на OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

4
Це рішення спрацьовує "дзвіночком" в iTerm 2 при кожному використанні, тож перестрибування між словами може стати дійсно дратує.
Меттью Морек

1
хтось з'ясував, як відключити це з боку ^ @MatthewMorek
Даніель Кобе

18
'\ e \ e' запобігає дзвону. Моя конфігурація на El Capitan з iTerm 2 в режимі сумісності терміналів bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Йоганнес Гонтрум

Дякую, це вирішило питання щодо macOs Sierra. Я не отримую жодних звукових дзвонів ні на терміналі, ні на iTerm2.
Распо

Як ви налаштовуєте його рухатись від кінця слів, а не від початку чи їх?
Mafro34

22

На MacOS High Siera 10.13.6 або Mojave 10.14.2 та використання iTerm2 з ZSH Для переходу зі слів я повинен ставити так:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

Інші рішення не спрацьовують


1
Це єдине рішення, яке працювало і для мене. Дякую! Mac OS Mojave
jamescampbell

Працює і на ОС Каталіна!
Рід Річардс

7

Хоча слід сказати , не відповідав на ваше запитання, за замовчуванням для зв'язування forward-wordі backward-wordє alt-fвідповідно. alt-b.

Це працює скрізь, не вимагає від вас виходу з головного ряду і має приємне мнемонічне властивість (f = вперед, b = назад), одночасно також узгоджуючись із ctrl-fі ctrl-bбудучи, forward-characterі backward-character.

Вирвіть клавіші зі стрілками!


4
не працює для мене в zsh / iterm2, друкує ƒ і ∫ (cb cf працює).
Даворін

2

Щоб змусити мене працювати, я використав цю відповідь , проте мені довелося поміняти коди (зліва <-> праворуч)

⌥ + ← Надіслати шістнадцяткові коди: 0x1b 0x66
⌥ + → Надіслати шістнадцяткові коди: 0x1b 0x62

і додати наступне до мого ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word

Було б , можливо , буде менш заплутаною , якщо ви змінювали bindkeyз замість того , щоб зв'язуватися ^[fз forward-word, і не backward-word.
Миколай

1

У Mavericks (10.9.4) код дорівнює 1; 5 ... тому для прив'язки Alt зі стрілками у мене є свій .zshrc за допомогою цього:

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

Ви можете використовувати CTRL + V, а потім команду, яку потрібно використовувати

в Йосеміті використовують розчин Роба


1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie

0

У zsh ви можете скористатися bindkeyкомандою, щоб побачити комбінації клавіш.

Використовуйте bindkeyдля вивчення параметрів, доступних без спеціальних вкладень.

А саме ^[b рухатись назад словом назад і ^[fрухати вперед слово.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.