Есть ли способ перейти к более ранней части команды командной строки в 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.