Как переместить курсор слово за словом в Терминале OS X

762

Я знаю комбинацию Ctrl+, Aчтобы перейти к началу текущей команды, и Ctrl+, Eчтобы перейти к концу.

Но есть ли способ переходить слово за словом, как в приложениях Какао Alt+ / ?

жестяной человек
источник
2
Какую оболочку вы используете? Bash?
Саргун Диллон
4
iTerm2 намного приятнее встроенного терминала. Я разместил инструкции ниже о том, как настроить клавиатуру :)
cwd
21
Эти ALTярлыки были добавлены в терминал в последней OS X версии.
Мосты Мостачо
7
По моему мнению, это не является темой, оболочка Bash является подходящей средой программирования, и привязки readline широко распространены в большинстве популярных приложений CLI для Linux. Кроме того, посмотрите на количество голосов, высказанных сообществом.
GL2014
11
Повторно открытое голосование, Терминал OS X очень расценивается как инструмент программирования.
Джечлин

Ответы:

567

Из коробки вы можете использовать довольно странные Esc+, Fчтобы перейти к началу следующего слова и Esc+, Bчтобы перейти к началу текущего слова.

Кристиан Дж.
источник
47
Было неудобно повторно нажимать обе клавиши для повторного выполнения команды. Я считаю, что делать это в Mac OSX Terminal довольно глупо, если сравнивать с GNOME Terminal.
Phương Nguyễn
245
Вы можете включить «Использовать опцию как мета-ключ» в Терминале> Настройки> Настройки> [профиль]> Клавиатура . Тогда вам не нужно вручную вводить Esc отдельно.
Крис Пейдж
7
Также, если вы нажмете « EscFв конце строки или на другую комбинацию клавиш в начале строки, вместо этого просто вставляется буква. Досадно!
Нолдорин
10
Re «bizarre»: «F» и «B» означают «Вперед» и «Назад». Control-F перемещает курсор вперед на один символ, а Control-B перемещает курсор назад на один символ. Использование мета-модификатора (или ESC) означает «двигаться по словам». Это emacs-совместимые привязки. Если вы используете bash, есть возможность использовать vi-совместимые привязки, или вы можете полностью их настроить ~/.inputrc.
Крис Пейдж
5
Использование опции в качестве мета, к сожалению, не подходит для тех из нас, кому нужен ключ опции для ввода важных символов оболочки, таких как ~ и | (как на французской клавиатуре).
Эрик О Лебиго,
417

В Mac OS X - следующие сочетания клавиш работают по умолчанию. Обратите внимание, что вы должны сделать так, чтобы клавиша Option действовала как мета в настройках терминала (на вкладке клавиатуры)

  • alt (⌥)+ Fперейти на F вперед по слову
  • alt (⌥)+ Bпрыгнуть B назад на слово

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

  • alt (⌥)+ Dудалить слово, начиная с текущей позиции курсора
  • ctrl+ Aперейти к началу строки
  • ctrl+ Eперейти к концу строки
  • ctrl+ Kубить строку, начиная с позиции курсора
  • ctrl+ Yвставить текст из буфера уничтожения
  • ctrl+ Rотменить поиск команд, которые вы ввели в прошлом из вашей истории
  • ctrl+ Sпереадресация поиска (у меня работает в zsh, но не в bash)
  • ctrl+ Fдвигаться вперед на букву
  • ctrl+ Bдвигаться назад на чарса
  • ctrl+ Wубрать слово назад из позиции курсора
Варун Катта
источник
1
Спасибо! Мне было интересно, почему это не работает из коробки, это именно то, что мне нужно.
Flov
11
Вы можете изменить мета в iterm2 следующим образом: «Настройки» -> «Профили» -> «Ключи» -> «Левая клавиша» действует как +ESC, затем вы можете использовать OPTION f / b для перемещения слова вперед и назад соответственно. Подробнее
Алан Донг
5
[ Ctrl + W ] - убрать слово назад из позиции курсора
YemSalat
[Ctrl + U] - чтобы удалить всю запись
Корнелиус
286

Вот как вы можете это сделать

По умолчанию Терминал имеет следующие комбинации клавиш для перемещения (влево и вправо) слово за словом:

  • esc+ B(слева)
  • esc+ F(справа)

Вы можете настроить alt+ и сгенерировать эти последовательности для вас:

  • Открыть терминал настройки ( cmd+, );
  • На вкладке «Настройки» выберите «Клавиатура» и дважды щелкните ⌥ ← если она есть, или добавьте ее, если ее нет.
  • Установите модификатор по своему усмотрению и введите горячую клавишу в поле: esc+ B, генерируя текст\033b (вы не можете набирать этот текст вручную).
  • Повторите для слова право ( esc+ Fстановится \033f)

Кроме того, вы можете обратиться к этому сообщению в блоге на textmate:

http://blog.macromates.com/2006/word-movement-in-terminal/

Fil
источник
7
Для пользователей MacOSX 10+ и iTerm: либо вы назначаете комбинацию клавиш для глобальных настроек, либо в виде комбинации клавиш профиля. Убедитесь , что вы выбрали: «Отправить Escape - последовательность» на раскрывающемся списке выбора и ввода только Bдля задней или Fдля вперед в Esc+поле
Гас
+1 за великую мнемонику, о которой я раньше не думал. Я определенно / к сожалению не запомню этого сейчас, потому что я настроил alt leftи alt rightсгенерировал эти последовательности
Arc676
Если я добавлю сопоставление клавиш в терминал, он будет привязан к «^ [B» вместо Esc-B.
Андреа Бергонзо
164

Переключитесь на iTerm2 . Это бесплатно и намного приятнее, чем обычный старый терминал. Кроме того, он имеет гораздо больше возможностей для настройки, таких как сочетания клавиш.

Также мне нравится, что вы можете использовать cmdи 1-9 для переключения между вкладками. Попробуйте, и вы никогда не вернетесь к обычному терминалу :)

Как настроить пользовательские настройки клавиатуры в iterm2

  • Установите iTerm2
  • Запустите и перейдите на панель настроек.
  • Выберите вкладку профилей клавиатуры
  • Вам нужно будет либо скопировать профиль во что-то новое, а затем удалить комбинации клавиш со стрелками, такие как ^+ Right/Left либо, если вам не резервная копия, просто удалите их из профиля по умолчанию.
  • Далее убедитесь, что ваш измененный профиль выбран (помечен)

Picture 1.png

  • Теперь выберите вкладку клавиатуры (самый верхний ряд)

iTerm 2

  • Нажмите на кнопку «плюс», чтобы добавить новую комбинацию клавиш
  • В первом поле введите CMD+Left arrow
  • Во втором поле выберите «отправить код выхода»
  • В третьем поле введите букву B

Изображение 2.png

  • Повторите с желаемыми комбинациями клавиш. escape+ Bперемещает одно слово влево, escape+ fперемещает одно слово вправо.
  • Вы также можете установить cmd+, dчтобы удалить слово перед курсором с помощью escape+d

Я часто нажимаю не ту кнопку (cmd / control/ alt) клавишей со стрелкой, и поэтому у меня есть комбинации клавиш со стрелками, все эти кнопки настроены для перехода вперед и назад по словам, но, пожалуйста, делайте то, что вам больше подходит.

УХО
источник
4
Независимо от того, что я делаю, я не могу войти Ctrl + Arrow Leftили Right- Upи Downработает: / пробовал с и без нового профиля, установленного по умолчанию
Тоби
4
Решение: мне пришлось отключить ярлыки управления полетом в Системных настройках MacOS -> Клавиатура :)
Тоби
Вышеприведенная инструкция больше не работает с iTerm2. Пожалуйста, смотрите мои ответы ниже для iTerm2 Build 3.3.4.
Повесить
150

На самом деле есть гораздо лучший подход. Удерживайте option( altна некоторых клавиатурах) и нажимайте клавиши со стрелками влево или вправо для перемещения по слову. Просто как тот.

option
option

Также ctrleприведет вас к концу линии и ctrlaприведет вас к началу.

mdubez
источник
2
Иногда это не работает в определенных случаях. Для меня, когда я открыл Terminal.app, это было нормально, но для IntelliJ он просто напечатал [Dи [C. Чтобы исправить это, добавьте bind '"[D": backward-word'и bind '"[C": forward-word'мой .bashrc.
Джейми
@JamieCounsell Я добавил привязку, .bashrcно это не сработало, что-то не так для меня? (Я использую RubyMine)
张艳军
@ 张艳军 Я не уверен, что RubyMine читает .bashrcпри загрузке терминала. Попробуйте echo "here"и посмотрите, отображается ли это сообщение при открытии нового терминала. Кроме того, вы должны закрыть и заново открыть терминал или запустить, source ~/.bashrcчтобы он прочитал новый файл.
Джейми
79

У меня Alt+ / работает: откройте Настройки »Настройки» Клавиатура , установите запись для курсора параметра влево, чтобы отправить строку в оболочку: \ 033b , и установите курсор параметра вправо, чтобы отправить строку в оболочку: \ 033f . Вы также можете использовать это для других комбинаций клавиш управления.

Питер Хилтон
источник
20
Чтобы получить \ 033b, вам нужно нажать Esc, а затем b.
Мэтью Шинкель
7
Я на Snow Leopard и обнаружил, что он работает только при включении Enable option as meta key. Кстати, это очень круто. Ключ наверняка будет гораздо удобнее для достижения по сравнению с Esc + B или Esc + F
Phương Nguyễn
2
Вне зависимости от того, что здесь происходит? Почему этот код отличается для начала в OSX? Как я могу найти другие такие коды?
Koobz
в моем Mac его Настройки> Профили> Клавиши левой клавиши опции, установленные как + Ecs
Арун
38

На самом деле это зависит от того, какую оболочку вы используете, однако большинство оболочек имеют схожие привязки. Привязки, на которые вы ссылаетесь (например, Ctrl+ Aи Ctrl+ E), являются привязками, которые вы найдете во многих других программах, и они используются целую вечность, кстати, BTW также работает в большинстве приложений пользовательского интерфейса.

Вот вид привязок по умолчанию для Bash:

Самые важные сочетания клавиш Bash

Также обратите внимание, что вы можете настроить их. Вам нужно создать файл, имя которого вы хотите, я назвал свой .bash_key_bindings и поместил в мой домашний каталог. Там вы можете установить некоторые общие параметры bash, а также установить привязки клавиш. Чтобы убедиться, что они применяются, вам нужно изменить файл с именем «.bashrc», который bash считывает при запуске (вы должны создать его, если он не существует), и сделать там следующий вызов:

bind -f ~/.bash_key_bindings

~ означает домашний каталог в bash, как указано выше, вы можете называть файл так, как вам нравится, и также размещать его там, где вам нравится, при условии, что вы указываете правильный путь + имя для привязки.

Позвольте мне показать вам некоторые выдержки из моего файла .bash_key_bindings:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Они просто устанавливают несколько параметров (например, отключить звонок; все это можно посмотреть на веб-странице bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Они гарантируют, что одни только персонажи ничего не делают, кроме того, что они «напечатаны» (они вставляются в оболочку).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

Это довольно интересно. Если я нажму Ctrl+ Dодин (я выбрал d для удаления), ничего не произойдет. Но если я тогда наберу строчную букву w, слово слева от курсора будет удалено. Однако если я наберу верхний регистр, слово справа от курсора будет уничтожено. То же самое касается l и L относительно всей строки, начиная с курсора. Если я наберу «а», вся строка будет фактически удалена (все до и после курсора).

Я поставил прыжок на одно слово вперед на Ctrl+ Fи одно слово назад на Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Как вы можете видеть, вы можете сделать ярлык, который немедленно приводит к действию, или вы можете сделать тот, который просто вставляет последовательность символов, а затем вам нужно ввести один (или более) символов, чтобы действие выполнялось как показано в примере выше.

Поэтому, если вам не нравятся привязки по умолчанию, не стесняйтесь настраивать их по своему усмотрению. Вот ссылка на руководство по bash для получения дополнительной информации.

Mecki
источник
как commandкод ключа? В вашем примере controlесть \C, но как command?
Пасхалис
В основном я хочу отобразить Ctrl + A на cmd + left (перейти к началу строки)
Paschalis
1
@Paschalis В MacOS X командная клавиша отображается Metaв bash ( \M), cmd + left будет \M-\e[D. Однако вы не можете сопоставить cmd + ... ни с чем, все сочетания клавиш обрабатываются (и, таким образом, проглатываются) самим приложением Terminal (те, которые никогда не перенаправляются в оболочку), а cmd + left отображается на «предыдущее окно», если у вас несколько окна терминала открыты. Извините, это просто невозможно с приложением Terminal.
Меки
18

Используйте пресет редактирования естественного текста !

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

По сути, он связывает, среди других последовательностей клавиш, Option + LeftArrow с ^[bпоследовательностью и Option + RightArrow с^[f

Это работает в рыбе и баш, а также в терминале PSQL.

Dziamid
источник
Это наиболее эффективный способ установки старого доброго сопоставления для ключей. Спасибо!
fedesismo
В случае, если кто-то запутается, как я, учтите, что эта предустановка доступна только на вкладке «Ключи профиля », а не на вкладке « Ключи верхнего уровня ».
Бен-Альбрехт
15

Если вы оказались пользователем Vim, вы можете попробовать режим vim в bash. Запустите это или поместите в свой ~/.bashrcфайл:

set -o vi

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

jches
источник
15

Если вы отметите Use option as meta keyна вкладке «Клавиатура» в настройках, то команды стиля по умолчанию в emacs для forward- и backward-word и ⌥F( Alt+ F) и ⌥B( Alt+ B) соответственно.

Я бы порекомендовал читать From Bash на Z-Shell . Если вы хотите увеличить свое мастерство в bash / zsh!

Matt
источник
1
Да, это работает. Но проблема в том, что я хочу набрать фигурные скобки ([] {} |), которые есть в Option-7, Option-8 и Option-9. Опции теперь мета, так что они заканчиваются Meta-7, Meta-8 ... Есть идеи?
Мартин Уикман
12

На Mac OS X Lion 10.7, Terminal карты Option- Left/Right Arrowк Esc- b/fпо умолчанию, так что теперь встроенный для Баш и других программ, использующих эти Emacs-совместимых комбинаций клавиш.

Крис Пейдж
источник
12

Удерживая клавишу «Option», щелкните, куда вы хотите переместить курсор

Дан Алботяну
источник
1
Неплохой обходной путь.
duyn9uyen
8

В Bash они связаны с Esc- Bи Esc- F. Bash имеет много-много горячих клавиш; посмотрите на результат, bind -pчтобы увидеть, что они есть.

Энди Линч
источник
4

Под iterm2«S Настройки> Профиль> Кис , вы щелкаете +ниже ключевых Отображения и записать новый ярлык. Для действия выберите Send Escape Sequenceи введите bилиf вперед и назад» соответственно.

Когда я попытался записать один для ( Ctrl+ ), я заметил в поле « Сочетание клавиш», что стрелка так и не появилась. Оказывается, мне пришлось сначала отключить системные настройки Mac по умолчанию > Клавиатура> Сочетания клавиш> Сочетания клавиш управления полетами, чтобы все заработало, так как они переопределяют сочетания клавиш по умолчанию в iterm2. Должно быть верно и для стандартного приложения терминала.

Системные настройки клавиатуры

Qix
источник
1

Новый ответ для пользователей iTerm2 Build 3.3.4:

Шаг 1: (macOS X) Системные настройки> Клавиатура> вкладка «Ярлыки»> Выбрать «Управление полетом» (левая панель)> Снимите флажки с ярлыков «Переместить влево на пробел» и «Переместить влево на пробел»

Шаг 2: (iTerm2 Build 3.3.4) Предпочтения> Профили> Выбрать * По умолчанию (левая панель)> Вкладка «Ключи»> Удалить записи «⌥->» и «⌥ <-»> Установить оба ключа «Левая опция» (⌥): "и" Правая клавиша (⌥): "Esc +

Не возиться с профилями оболочки, не возиться с подчиненным терминалом masOS (по умолчанию), нет неловких Esc + F / B, полоскать и повторять без смысла.

Сделка сделана !!!

Наслаждайтесь этим советом, мои товарищи ПРОГРАММИСТЫ!

вешать
источник
0

Как ответил ранее, вы можете добавить set -o viв ваших , ~/.bashrcчтобы использовать vi/ vimпривязок клавиш, или же вы можете добавить следующие части в .bashrcшевелить Ctrlи клавиши со стрелками:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Чтобы запустить эффект этих строк кода, либо source ~/.bashrcначните новый сеанс терминала.

Chinmay
источник