Есть ли способ перейти к более ранней части команды командной строки в Mac Terminal?


9

Я часто пишу длинные команды в оболочке bash - вещи с множеством аргументов, веб-адресами, маршрутами и т. Д. И т. Д. Время от времени я буду понимать, что я забыл, скажем, поставить свой «пакетный исполнитель» в начале команды, или что-то написал с ошибкой, или забыл кавычки. Или что-то такое же простое, как поставить «cd» вместо «vim».

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

Есть ли способ снова перейти на начало строки?


2
Возможно, вы захотите избавиться от стандартного терминального приложения и загрузить iTerm
Clement Herreman

Почему? Я только что проверил, и, похоже, ведет себя примерно так же. (Клавиша home работает, но, так как у меня есть другие ключи, это не имеет значения). Что он предлагает, что стоило бы переделать все мои настройки, конфигурации и задачи и еще много чего?
GlyphGryph

Это похоже на то, что вы можете настроить с помощью .inputrc
Роб

Кроме того, чтобы прыгать по одному слову за раз, используйте ⌥B и ⌥F для перехода назад и вперед соответственно.
Фидели

@fideli, но только если вы включили «Использовать опцию как мета-ключ». Обратите внимание, что начиная с Mac OS X Lion 10.7, настройки клавиатуры терминала по умолчанию отображают Option-Left Arrow / Right Arrow на Esc-b / f, поэтому настройка не требуется.
Крис Пейдж

Ответы:


12

В дополнение к ^ A и ^ E, вы можете сделать

  • Esc-b перепрыгнуть на одно слово
  • Esc- fпрыгнуть вперед на одно слово
  • Ctrl- bпереместиться назад на один символ
  • Ctrl- fдвигаться вперед на один символ

См. Руководство по bash для команд для перемещения .


На что следует обратить внимание - это от Emacs, и, добавив emacsопцию в свои шеллоты, вы можете получить еще кое-что.
TC1

6

Вы можете использовать команды Emacs, например:

  • ctrl-А перейти в начало командной строки
  • ctrl-Е чтобы перейти в конец командной строки

Это bash, а не только для Mac.


3
set -o vi

Затем Escследует

^начало строки $конец строки bодно слово backword wодно слово вперед


Я довольно большой поклонник Vim, поэтому принцип вашего ответа для меня великолепен, но редактирование модальной командной строки может немного смущать OP, особенно без какого-либо упоминания о том, как вернуться к возможности печатать! Вернитесь в режим вставки, используя i(вставка) для ввода перед курсором или a(добавление) для ввода после курсора.
Каскабель

Я использовал vi в качестве основного текстового редактора на протяжении десятилетий, но я все еще предпочитаю привязки клавиш emacs для моей оболочки.
Кит Томпсон

На самом деле, OP использует vim для всего редактирования текста, поэтому знание того, что вы можете установить стандарты vi, невероятно полезно. Большое спасибо!
GlyphGryph

@ Киет Томпсон: я привык думать так же. Я просто думал, что shell не очень хорошо сочетается с этим переключением режимов (например, с раздражающей vклавишей в режиме vi). Но через некоторое время я только что заразился vim, поэтому я предлагаю вам попробовать: P
kizzx2

1

Это не отвечает на ваш вопрос, но может решить вашу проблему в некоторых случаях.

Вbash!! знаке заменяются на предыдущую команду. Поэтому, если вы забыли добавить что-то в начало команды (например sudo), вы можете сделать что-то вроде этого

# ./super_secret_command --with-args
=> ACCESS DENIED

# sudo !!
sudo ./super_secret_command --with-args
=> ACCESS GRANTED

0

Вы можете настроить обычный Ctrl/Opt+Left/Right ярлыки для использования в терминале. Таким образом, вам не нужно переучивать все, когда вы используете терминал.

открыто терминал »Настройки…» Настройки »(выбрать профиль)» Клавиатура .

Там назначьте следующие ярлыки:

  • Control + Cursor Left: Отправить строку\033[1~в оболочку
  • Control + Cursor Right: Отправить строку\033[4~в оболочку
  • Option + Cursor Left: Отправить строку\033[5Dв оболочку
  • Option + Cursor Right: Отправить строку\033[5Cв оболочку

Мне тоже нравится следующее (Fn + Left/Right ):

  • Home: Отправить строку\033[1~в оболочку
  • End: Отправить строку \033[4~в оболочку

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


На Лев ⌥ ← и ⌥ → связаны M-bи M-fпо умолчанию. И ⌃ ← и ⌃ → являются сочетаниями клавиш по умолчанию для изменения пробелов.
Lri

0

Мне это нужно было в Cygwin, а не в Mac, но добавление следующего ~/.inputrcможет также помочь:

"\e[1;5C": forward-word   # ctrl + right
"\e[1;5D": backward-word  # ctrl + left 

0

Я не пользователь Mac, но как насчет Homeключа? Это прекрасно работает на терминале Linux.


1
Нет, это прокручивается до верхней части окна терминала.
GlyphGryph

По умолчанию Home и End прокручивают представление, что является стандартным поведением Mac. По умолчанию Shift-Home и Shift-End отправляют «ESC [H» и «ESC [F» соответственно). Все они настраиваются в Терминале> Настройки> Настройки> [профиль]> Клавиатура .
Крис Пейдж

0

Лучший способ перемещаться по командной строке в Mac Os X - использовать мой профиль: https://github.com/lingtalfi/mac-terminal-shortcuts

Он предоставляет следующие (интуитивно понятные) ярлыки:

ALT-left: move one word backward
ALT-right: move one word forward
CTRL-left: move to the beginning of the line
CTRL-right: move to the end of the line
ALT-backspace: kill one word backward
ALT-del: kill one word forward
ALT-up: set word after cursor to uppercase
ALT-down: set word after cursor to lowercase
home: move to the beginning of the line
end: move to the end of the line    
CTRL-backspace: Same as ALT-backspace
CTRL-del: Same as ALT-del
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.