В Bash есть несколько удобных операторов для повторения частей последней команды:
!^
расширяется до первого аргумента предыдущей команды, например,$ echo one "two three" one two three $ echo !^ echo one one
!$
расширяется до последнего аргумента предыдущей команды, например,$ echo one "two three" one two three $ echo !$ echo "two three" two three
!*
распространяется на все аргументы предыдущей команды, например,$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(Насколько я понимаю, это синтаксически !!:^
, !!:$
и !!:*
соответственно, где !!
это обозначение событие , которое расширяется к предыдущей команде, и ^
, $
и *
словесные обозначения, см Bash Reference Manual или man bash
.)
Это часто довольно удобно. Но это становится еще круче с сочетаниями клавиш:
Когда вы нажимаете Alt+ .или Alt+ _, последний аргумент предыдущей команды вставляется в текущую команду, так же, как если бы вы написали
!$
в этот момент.Также можно нажать Alt+ Ctrl+, yчтобы вставить первый аргумент предыдущей команды, как если бы вы написали
!^
в этот момент.
(См. Библиотеку GNU Readline или info readline
.)
Я предпочитаю сочетания клавиш, а не операторы истории Bash, потому что я вижу, что вставляю, прежде чем я действительно выполню команду. Тем не менее, похоже, что нет ярлыка, который позволил бы мне вставить все слова предыдущей команды, то есть того, которое выполняет свою !*
работу. По крайней мере, я не смог его найти.
Есть ли такой ярлык? Если нет, то можно ли настроить библиотеку readline, чтобы добавить ее, и как?
zsh
, если вы печатаете , echo !*
а затем нажмите клавишу TAB, у вас есть желаемый эффект. В общем, TAB в режиме readline расширит все возможности расширения. Очень кстати; вероятно bash будет иметь какую-то конфигурацию для того же эффекта? @ Seth, я думаю, что это readline в bash, а не эмулятор терминала - не уверен, хотя.
man bash
(где-то в строке 3030)
\e.
и \e_
сопоставлены с функцией readline yank-last-arg
и \e\C-y
сопоставлены с yank-nth-arg
. К сожалению, кажется, что нет (единственной) команды, которая добавляет несколько предыдущих аргументов одновременно.