Aby zażądać wydrukowania polecenia zamiast wykonania po podstawieniu historii, dodaj :p
modyfikator , np !42:p
. Wynikowe polecenie zostanie również wprowadzone do historii, więc można je nacisnąć, Upaby je edytować.
Jeśli masz histverify
opcję set ( shopt -s histverify
), zawsze będziesz mieć możliwość edycji wyniku podstawienia historii.
fc
Wbudowane daje ograniczony dostęp do ekspansji historii (bez oznaczników słowo) i pozwala edytować poprzednie polecenie w zewnętrznym edytorze.
Możesz użyć, !prefix
aby odwołać się do ostatniego polecenia zaczynającego się na prefix
, oraz !?substring
do odwołania się do ostatniego polecenia zaczynającego się od substring
. Gdy wiesz, czego szukasz, może to zaoszczędzić dużo czasu history | less
.
Innym sposobem wyszukiwania w poprzedniej historii jest wyszukiwanie przyrostowe: naciśnij Ctrl+ Ri zacznij wpisywać podciąg tego, czego szukasz. Naciśnij Ctrl+, Raby przejść do poprzedniego wystąpienia szukanego ciągu i Ctrl+, Sjeśli zaszedłeś za daleko. Większość przycisków innych niż Ctrl+ R, Ctrl+ S, Backspacei zwykłych znaków zakończyć wyszukiwanie przyrostowe i mają zwykle efekt (np klawiszy strzałek, aby przesunąć kursor w linii Dodzwoniłeś, Enteraby uruchomić polecenie).
Gilles „SO- przestań być zły”
źródło
stty -ixon
zanim Ctrl-s zadziała.Ctrl-s
jest ważny, w przeciwnym razie utkniemy tak jak ja .Kolejny mały: Alt+#
komentuje bieżący wiersz i przenosi go do bufora historii.
Więc kiedy tworzysz wiersz poleceń i musisz wydać polecenie tymczasowe, aby np. Znaleźć plik, po prostu naciśnij Alt+ #, wydaj drugie polecenie, przejdź do historii, odkomentuj i kontynuuj.
źródło
Esc
,#
działaMożesz użyć magicznej przestrzeni, aby rozwinąć historię przed wejściem do Enter. W twoim .inputrc zamapuj przestrzeń na magiczną przestrzeń:
Teraz, za każdym razem, gdy wpiszesz spację po specyfikacji historii, zostanie ona natychmiast rozszerzona - przydatne, jeśli chcesz ją edytować!
źródło
Spójrz na
history-expand-line
polecenieAlt+^
domyślnie powiązane . Rozwinie linię w miejscu, którą możesz następnie edytować.źródło
Za pomocą
Ctrl+r
możesz przeszukiwać historię:Każde znalezione polecenie można edytować ...
Myślę, że znalazłem dokładnie to, czego potrzebujesz: uruchom
shopt -s histverify
i następnym razem, gdy będziesz chciał użyć!n
polecenia, nie zostanie wykonane, a tylko wprowadzone do wiersza poleceń ...źródło
!n:p
zadziała?Często tego chciałem. Kiedy użyłem csh (i tcsh), miałem idiom:
!:88*:p
Ten idiom wstawia „słowo 88 do ostatniego słowa” poprzedniego polecenia w punkcie, w którym piszesz w bieżącym wierszu polecenia, który zazwyczaj jest końcem. W csh takie wyrażenie nie generuje żadnych słów. Oznacza to, że nie musi istnieć słowo 88 ani żadne następne. Jeśli nie ma słowa 88, nie dodaje on żadnych słów na końcu wpisywanego polecenia, a następnie wypycha wynikowy wiersz polecenia do historii bez wykonania.
Jak zapewne wiesz
*! (jak !! i! -1) to poprzednie polecenie;
*: 88 to słowo 88 (pierwsze słowo - zazwyczaj polecenie - ma wartość zero) i csh wymagałoby takiego słowa, ale ...
*: 88 * to wszystkie słowa zaczynające się od słowa 88, a następnie csh robi nie wymagają tego słowa;
*: p oznacza print, ale nie uruchamiaj wiersza poleceń.
Z: p lub bez: wiersz poleceń jest dodawany do historii poleceń.
„Dlaczego 88?” zastanawiasz się? Ponieważ jest to ten sam klucz, co * potrzebuję. Jeśli masz tak długie polecenia, być może!: 888 *: p jest tym, czego potrzebujesz. Przepraszamy, to nie działa z Bash AFAIK. Bash powie tylko
bash: :88*: bad word specifier
Ciekawostka: Twoje polecenie zwykle nie musi być pierwsze.
> /tmp/foo echo My command is word 3
jest poprawny w bash i csh.
źródło
Zwykle używam Ctrl+ rdo wyszukiwania, a następnie Ctrl+ edo przejścia do końca linii bez wykonywania.
źródło