Как переместить курсор слово за словом в Терминале 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/


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приведет вас к началу.


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 для получения дополнительной информации.


как 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.


Это наиболее эффективный способ установки старого доброго сопоставления для ключей. Спасибо!
fedesismo

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

15

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

set -o vi

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


15

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

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


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-совместимых комбинаций клавиш.



8

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


4

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

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

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


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начните новый сеанс терминала.

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