Так же, как M-.
(мета-точка или esc-точка или alt-точка) - это функция readline yank-last-arg
, M-C-y
(meta-control-y или esc-ctrl-y или ctrl-alt-y) - это функция readline yank-nth-arg
. Без указания n
, он возвращает первый аргумент предыдущей команды.
Чтобы указать аргумент, нажмите клавишу Escape и номер или удерживайте Alt и нажмите номер. Вы можете сделать Alt- -чтобы начать указывать отрицательное число, затем отпустите Alt и нажмите цифру (это будет считаться с конца списка аргументов.
Пример:
Введите следующую команду
$ echo a b c d e f g
a b c d e f g
Теперь в следующем приглашении введите echo
(с пробелом), затем
Нажмите Alt- Ctrl- yи вы увидите:
$ echo a
Enterпока не нажимая , сделайте следующее
Нажмите Alt- 3 Alt- Ctrl-y
Нажмите Alt- - 2 Alt- Ctrl-y
Теперь вы увидите:
$ echo ace
Кстати, вы могли бы поставить echo
на строку, выбрав аргумент 0:
Нажмите Alt- 0 Alt- Ctrl-y
Редактировать:
Чтобы ответить на вопрос, который вы добавили в свой оригинал:
Вы можете нажать Alt- 0затем несколько раз нажать Alt- .чтобы выполнить предыдущие команды (arg 0). Точно так же Alt- -затем повторение Alt- .позволит вам пройти через предыдущие предпоследние аргументы.
Если в конкретной строке в истории нет подходящего аргумента, прозвучит звонок.
Если есть определенная комбинация, которую вы часто используете, вы можете определить макрос, чтобы его выполнял одно нажатие клавиши. Этот пример вызовет второй аргумент из предыдущих команд, нажав Alt- Shift- Y. Вы можете выбрать любое доступное нажатие клавиши вместо этого. Вы можете нажать его несколько раз, чтобы перейти к предыдущим.
Чтобы попробовать, введите макрос в командной строке Bash:
bind '"\eY": "\e2\e."'
Чтобы сделать его постоянным, добавьте эту строку в ваш ~/.inputrc
файл:
"\eY": "\e2\e."
К сожалению, это не работает для аргументов 0 или отрицательных чисел аргументов.
bind -lp
и смотреть текущие привязки.-s
(новый в Bash 4) список макросов, созданных с использованием-x
.M-.
:Alt-3
Alt-Ctrl-y
например, равно удержаниюAlt
и вводу3.
. Если вы набираете3.
это несколько раз, не отпуская,Alt
вы переходите к третьим аргументам ваших предыдущих командных строк.!$
получает последний элемент предыдущего аргумента командной строки.источник
!:3
получает третий!!
получает всю последнюю команду. Полезно, если вы забыли использоватьsudo
.!:1-2
получает все, кроме последнего из 3 аргументовecho foo{,bar} baz
, команда записывается как напечатанная и расширяется после. С учетом вышесказанного использованиеecho !:1
after разрешает,echo foo{,bar}
а затем расширяет доecho foo foobar
Чтобы использовать первый аргумент, вы можете использовать
!^
или!:1
Пример:
Поскольку ваш вопрос касается использования любых других аргументов, вот несколько полезных:
Первые четыре формы чаще используются. Форма
!:2-
несколько нелогична, так как не содержит последнего аргумента.источник
file3
отmv file1 file2 file3 target/
?Мне так понравился ответ @larsmans, что мне пришлось больше узнать. Добавление этого ответа, чтобы помочь другим найти раздел справочной страницы и узнать, для чего Google:
источник
! ^ может быть командой для первого аргумента. я не уверен, есть ли способ получить nth.
источник
!:n
, но считая с конца, а не с начала?Вы также можете получить аргументы от любой команды в вашей истории!
источник
Проверено на Ubuntu 18.04
Чтобы вставить предыдущие аргументы:
В Linux вы можете повторять команды, чтобы вернуться в историю
Пример:
Последняя команда:
mv
foo
mv foo
Общие ярлыки
Для перебора аргументов в предыдущей команде
работает только в зш
запустить или добавить это к вашему
~/.zshrc
Теперь используйте Alt+, .чтобы вернуться так, как вы хотите, затем используйте Alt+, :чтобы перебрать аргументы
Предполагая, что последняя команда
5
4
3
2
1
echo
источник: https://stackoverflow.com/a/34861762/3163120
Чтобы увидеть все доступные ярлыки
bind -lp
bindkey -L
Я держу это в актуальном состоянии здесь: https://github.com/madacol/docs/blob/master/bash-zsh_TerminalShorcuts.md
источник
Alt .
на Zsh на Mac печатает≥
🤔bindkey -L
в zsh, чтобы увидеть все ярлыки, связанные, возможно, это поможет определить проблему, или даже найти другие полезные команды. В моем случае, например: привязкаAlt .
определяется какbindkey "^[." insert-last-word
.Ctrl L
(очистить экран) ->bindkey "^L" clear-screen
.Alt+Ctrl h
->bindkey "^[^H" backward-kill-word
(так же, какCtrl w
удалить последнее слово)bindkey "^[^_" copy-prev-word
По сути, он полезен для восстановления предыдущих (командных) аргументов .
Например, если введена следующая команда:
Затем,
Hello,
будет первый аргумент, аtoday?
на шестой , который является последним; то есть на него можно ссылаться, набрав:Alt+6 с последующим Ctrl-Alt-6
Ctrlтрадиционно обозначаются как шляпа характер
^
предварённого к именам ключей, а AltтакжеM-
что M ет префикс.Таким образом, вышеприведенный ярлык может быть переопределен как
^My
янки.Также в командной строке есть ярлык замены шапки :
заменить первую совпадающую строку предыдущей команды , что означает:
приведет к:
оставив второй матч (
hello
) без изменений.Выше это просто ярлык для:
Подстановка уровня события (*) для первой найденной (совпавшей) строки в предыдущей команде, при этом префикс первой части с помощью
g
переключателя будет применяться ко всей строке g lobally :как обычно делается в других связанных командах, таких как
sed
,vi
и вregex
(регулярное выражение) - стандартный способ поиска ( строка соответствия ).Это то, что я понял, используя это сам и пробуя самостоятельно, исходя из того, что я читал из различных источников, включая страницы руководства, блоги и форумы.
Надеюсь, что он проливает некоторый свет на загадочные способы
bash
, оболочку Bourne-Again (игра наsh
оболочке, которая сама называется оболочкой Bourne по фамилии своего изобретателя), которая является оболочкой по умолчанию во многих дистрибутивах, включая серверы ( серверные ОС ).источник
! ^ получит первый параметр,! $ - последний параметр,!: n - n-й элемент.
источник
Метод, описанный в конце принятого ответа, также работает для меня с нулевым аргументом. У меня есть эти строки в моем
~/.inputrc
:\e2\e.
имеет преимущество перед\e2\e\C-y
тем, что циклически повторяет предыдущие команды, если его нажимать несколько раз, а не вставлять второй аргумент предыдущей команды несколько разЧтобы вставить всю предыдущую команду, вы можете набрать
!!\e^
.\e^
естьhistory-expand-line
.источник
Если вы работаете на Mac, вы, как правило, получаете расширенные символы с помощью ctrl + letter. У меня есть мой ключ опции права пробела, определенный как мета в моем терминале (iTerm2). Это означает, что я использую клавишу для навигации по слову и получения параметров из предыдущих команд.
источник