Podobnie jak M-.
(meta-kropka, esc-kropka lub alt-kropka) jest funkcją readline yank-last-arg
, M-C-y
(meta-control-y lub esc-ctrl-y lub ctrl-alt-y) jest funkcją readline yank-nth-arg
. Bez określenia n
, szarpnie pierwszy argument poprzedniego polecenia.
Aby określić argument, naciśnij klawisz Escape i liczbę lub przytrzymaj klawisz Alt i naciśnij liczbę. Możesz to zrobić Alt- -aby rozpocząć określanie liczby ujemnej, zwolnij klawisz Alt i naciśnij cyfrę (będzie liczona od końca listy argumentów.
Przykład:
Wpisz następujące polecenie
$ echo a b c d e f g
a b c d e f g
Teraz w następnym wierszu wpisz echo
(z następującą spacją), a następnie
Naciśnij Alt- Ctrl- ya zobaczysz:
$ echo a
bez naciskania Enterjeszcze wykonaj następujące czynności
Naciśnij Alt- 3 Alt- Ctrl-y
Naciśnij Alt- - 2 Alt- Ctrl-y
Teraz zobaczysz:
$ echo ace
Nawiasem mówiąc, mógłbyś wstawić echo
wiersz, wybierając argument 0:
Naciśnij Alt- 0 Alt- Ctrl-y
Edytować:
Aby odpowiedzieć na pytanie dodane do oryginału:
Możesz nacisnąć Alt- 0a następnie kilkakrotnie nacisnąć Alt-, .aby przejść przez poprzednie polecenia (arg 0). Podobnie Alt- -następnie powtarzanie Alt- .pozwoliłoby ci przejść przez poprzednie argumenty przedostatnie.
Jeśli nie ma odpowiedniego argumentu na konkretnej linii w historii, dzwonek zadzwoni.
Jeśli często używasz określonej kombinacji, możesz zdefiniować makro, aby wykonać je jednym naciśnięciem klawisza. Ten przykład przywoła drugi argument z poprzednich poleceń, naciskając Alt- Shift- Y. Zamiast tego możesz wybrać dowolne dostępne naciśnięcie klawisza. Możesz naciskać go kilkakrotnie, aby przejść przez poprzednie.
Aby to wypróbować, wprowadź makro po znaku zachęty Bash:
bind '"\eY": "\e2\e."'
Aby było trwałe, dodaj ten wiersz do ~/.inputrc
pliku:
"\eY": "\e2\e."
Niestety wydaje się, że to nie działa w przypadku argumentów 0 lub ujemnych liczb argumentów.
bind -lp
i patrzeć na bieżące wiązania.-s
(nowość w Bash 4) wyświetla makra utworzone za pomocą-x
.M-.
:Alt-3
Alt-Ctrl-y
na przykład oznacza trzymanieAlt
i pisanie3.
. Jeśli wpiszesz3.
to wiele razy bez zwalnianiaAlt
, przejdziesz do trzeciego argumentu poprzednich linii poleceń.!$
pobiera ostatni element poprzedniego argumentu wiersza poleceń.źródło
!:3
dostaje trzeci!!
dostaje całe ostatnie polecenie. Przydatne, jeśli zapomniałeś użyćsudo
.!:1-2
dostajesz wszystkie oprócz ostatniego z 3 argumentówecho foo{,bar} baz
. Polecenie zostanie zapisane jako wydrukowane, a następnie rozszerzone. W związku z powyższym użycieecho !:1
po rozwiązuje do,echo foo{,bar}
a następnie rozwija się doecho foo foobar
Aby użyć pierwszego argumentu, możesz użyć
!^
lub!:1
Przykład:
Ponieważ twoje pytanie dotyczy użycia innych argumentów, oto kilka przydatnych:
Pierwsze cztery formy są częściej używane. Forma
!:2-
jest nieco sprzeczna z intuicją, ponieważ nie zawiera ostatniego argumentu.źródło
file3
zmv file1 file2 file3 target/
?Tak bardzo podobała mi się odpowiedź @larsmans, że musiałem dowiedzieć się więcej. Dodanie tej odpowiedzi, aby inni mogli znaleźć sekcję strony podręcznika i dowiedzieć się, po co szukać w Google:
źródło
! ^ może być poleceniem pierwszego argumentu. nie jestem pewien, czy istnieje sposób na uzyskanie n-tego.
źródło
!:n
, ale licząc od końca niż od początku?Możesz także uzyskać argumenty z dowolnego polecenia w historii!
źródło
Testowane na Ubuntu 18.04
Aby wstawić poprzednie argumenty:
W systemie Linux możesz powtarzać polecenia, aby wrócić do historii
Przykład:
Ostatnie polecenie to:
mv
foo
mv foo
Skróty ogólne
Aby iterować argumenty w poprzednim poleceniu
działa tylko w Zsh
uruchom lub dodaj to do swojego
~/.zshrc
Teraz użyj Alt+, .aby cofnąć się tak, jak chcesz, a następnie użyj Alt+: aby iterować argumenty
Zakładając, że ostatnim poleceniem jest
5
4
3
2
1
echo
źródło: https://stackoverflow.com/a/34861762/3163120
Aby zobaczyć wszystkie dostępne skróty
bind -lp
bindkey -L
Chcę to aktualizować w tym artykule https://gist.github.com/madacol/da38e42d7e45c2949a9f425cc20543e9
źródło
Alt .
na Zsh na Macu pisze≥
🤔bindkey -L
w Zsh, aby zobaczyć wszystkie skróty powiązane, być może pomoże to zlokalizować problem, a nawet znajdzie inne przydatne polecenia. W moim przypadku na przykład: powiązanieAlt .
jest zdefiniowane jakobindkey "^[." insert-last-word
.Ctrl L
(aby wyczyścić ekran) ->bindkey "^L" clear-screen
.Alt+Ctrl h
->bindkey "^[^H" backward-kill-word
(tak, jakCtrl w
usunąć ostatnie słowo)bindkey "^[^_" copy-prev-word
Zasadniczo ma zastosowanie w szarpaniu poprzednich argumentów (komend) .
Na przykład, jeśli wydane zostanie następujące polecenie:
Następnie
Hello,
będzie pierwszy argument, atoday?
ten szósty , czyli ostatni; co oznacza, że można się do niego odwołać, wpisując:Alt+6 śledzony przez Ctrl-Alt-6
Ctrljest tradycyjnie oznaczany jako znak kapelusza
^
poprzedzony nazwami klawiszy, i AltponieważM-
jest to przedrostek M eta .Tak więc powyższy skrót można zdefiniować na nowo
^My
.Ponadto w wierszu poleceń znajduje się skrót do zastępowania kapeluszy :
podstawić pierwszy dopasowany ciąg poprzedniego polecenia , co oznacza:
spowodowałoby:
pozostawiając drugi match (
hello
) bez zmian.Powyższe to tylko skrót do:
podstawienie na poziomie zdarzenia (*) dla pierwszego znalezionego (dopasowanego) ciągu w poprzednim poleceniu, podczas gdy prefiksowanie pierwszej części
g
przełącznikiem będzie miało zastosowanie do całej linii g lokalnie :jak zwykle dzieje się to w innych pokrewnych poleceniach, takich jak
sed
,vi
iregex
(wyrażenie regularne) - standardowy sposób wyszukiwania ( dopasowanie łańcucha ).Właśnie to zrozumiałem, używając go sam i próbując samodzielnie z tego, co czytam z różnych źródeł, w tym stron podręczników, blogów i forów.
Mam nadzieję, że rzuci nieco światła na tajemnicze sposoby
bash
, powłoki Bourne-Again (gra nash
powłoce, która sama nazywa się powłoką Bourne'a po nazwisku wynalazcy), która jest domyślną powłoką w wielu dystrybucjach, w tym serwerach ( systemach operacyjnych serwera ).źródło
! ^ dostanie pierwszy parametr,! $ dostanie ostatni parametr,!: n dostanie n-ty element.
źródło
Metoda opisana na końcu zaakceptowanej odpowiedzi działa również dla mnie z zerowym argumentem. Mam te linie w moim
~/.inputrc
:\e2\e.
ma tę przewagę\e2\e\C-y
, że cyklicznie przechodzi przez poprzednie polecenia, jeśli jest naciskany wielokrotnie zamiast wielokrotnie wstawiać drugi argument poprzedniego polecenia.Aby wstawić całe poprzednie polecenie, możesz wpisać
!!\e^
.\e^
jesthistory-expand-line
.źródło
Jeśli używasz komputera Mac, będziesz miał tendencję do uzyskiwania rozszerzonych znaków za pomocą klawiszy Ctrl + litera. Mam skonfigurowany mój klawisz opcji spacji-spacji zdefiniowany jako meta w moim terminalu (iTerm2). Oznacza to, że używam klawisza do nawigacji po słowie i pobierania parametrów z poprzednich poleceń.
źródło