Как вернуться к первому символу в командной строке * nix?

17

При написании длинной команды в командной строке * nix и необходимости вернуться к первому символу, чтобы добавить что-то в начале (например, a nohup, когда вы понимаете, что процесс будет длинным, или a sudo, когда вы понимаете, что вам нужны права суперпользователя) курсор может занять много времени, чтобы вернуться к первому символу ...

Есть ли короткий путь, который позволяет прыгать прямо туда?

Я использую Mac, так что Homeэто не вариант

clami219
источник
2
Если вы используете ноутбук Apple, Fn + Left / Right эквивалентны Home / End. (И, соответственно, Fn + Up / Down - PageUp / Down.)
duskwuff -inactive-
2
Тем, кто читает этот вопрос, это фактически вопрос об оболочке, более конкретно редактирование командной строки в оболочке. Ответ Ctrl-A до этого - bash (скорее всего) со стилем редактирования Emacs, по умолчанию.
Богатая гомолка
4
Альтернатива, если вам просто нужно добавить, sudoэто ввести sudo !!. Операция !!заменяется предыдущей командой.
Мэтью Крамли

Ответы:

29

Ctrl+Aдолжно сработать. Ctrl+Eсоответствует концу командной строки.

choroba
источник
1
Большой! Это прекрасно работает и на Mac!
clami219
1
Это также относится ко многим редакторам кода.
Jwosty
2
@ clami219: На самом деле это работает в большинстве текстовых контекстов в OSX. Привязки Emacs - замечательная вещь ...
Tommyo
Спасибо, это работает и в Linux.
Гидеон Бабу
10

Это зависит от рассматриваемой оболочки.

Некоторые оболочки (например, AT & T ksh88) практически не редактируют строку ввода.

В оболочках, реализующих viредактирование режима (возможно, вам придется включить это с помощью set -o vi), это делается нажатием Esc(для переключения из режима вставки) с последующим переходом 0к началу строки или $к концу строки. Затем снова войдите в режим вставки, нажав i- курсор останется на своем месте - или a- курсор переместится на один вправо, чтобы добавить текст.

vi Редактирование режима недавно было предписано стандартом POSIX.

Гораздо чаще emacs , режим редактирования (слава богам, он не имеет ничего общего с редактором-слэш-операционной системе Emacs) использует Ctrl-Aдля перехода на начало строки и Ctrl-Eперейти к концу строки. Этот режим требует, чтобы вы работали set -o emacsна многих оболочках (в первую очередь AT & T ksh93), но он включен по умолчанию в mksh и GNU bash.

Большинство современных оболочек поддерживают как emacsи viрежимы. (Оба эти режима требуют tty для работы.)

Во многих оболочках вы можете настроить сочетания клавиш; обычно для emacsрежима, хотя некоторые оболочки также позволяют настраивать привязку клавиш для viрежима. Если у вас есть ключ, к которому вы бы предпочли иметь эту привязку, вам сначала нужно выяснить, какие последовательности клавиш он производит (например, в моей системе Alt-CursorLeftпроизводит Esc+[+1+;+3+D( ^[[1;3D; ^Xесть Ctrl-Xи ^[есть Esc), чтобы я мог напечатать что-то вроде

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

и эта привязка клавиш будет изменена в зависимости от оболочки. Обычно вы можете сохранить их в файле запуска ( ~/.mkshrc, ~/.kshrc) или, для GNU bash, в ~/.inputrc. Обратите внимание, что не все оболочки поддерживают привязку всех ключей во всех версиях.

Обычно вы можете узнать, какие символы генерирует ключ, просто запустив catоболочку, набрав ключ и наблюдая. Затем нажмите ^C( Ctrl-C) для отмены cat.

mirabilos
источник
Мне нравится использовать ^ D, символ конца строки Unix, чтобы закончить cat. На мой взгляд, это ^ D, потому что текстовый поток "готово".
Аарон Холл
@AaronHall: это не сработает, если на линии уже что-то есть. Плюс, мы хотим прервать это, а не закончить ;-) Но да, в обычном случае вы правы. Но это особый случай.
Мирабилось
Терминал также может редактировать строки.
Сэмюэль Эдвин Уорд
@mirabilos Чтобы отправить EOF без перевода строки, просто выполните ^ D ^ D (т.е. дважды нажмите D).
Potatoswatter
@Patatoswatter да (забавно, я сам этого не знал), но я специально хочу здесь прервать. При отправке ^D^Dя все еще получаю «барахло» эхом ...
mirabilos
2

Вы пробовали Домашний ключ? Я использую MobXterm для подключения к Linux, а также клавиши Home и End на клавиатуре, чтобы перейти к первому или последнему символу команды.

PAS
источник
Вы правы! Я должен был указать, что я использую Mac ...
Clami219
2

Если вы переключились в viрежим, используя set -o vi, вы можете нажать Escи либо, Iлибо Aввести текст в начале или в конце строки. Или, если вы просто хотите переместить курсор, это ^и $.

TankorSmash
источник
какой режим какой оболочки?
Дэвид Ричерби
2

В режиме emacs (переключается с помощью:) set -o emacsэто нажатием:

  • Ctrl+A и Ctrl+E
  • Home и End
  • Esc+bи Esc+f(перемещает курсор назад и вперед текущего слова)

В режиме vi (переключается с помощью:), set -o viкогда в командном режиме ( Esc) это нажатием:

  • 0/ ^и $(он останется в командном режиме)
  • Iи A(он переключится в режим редактирования)

Смотрите также:

kenorb
источник