Możemy używać strzałek w górę i w dół, aby poruszać się po historii poleceń.
W niektórych IDE, takich jak Matlab, jeśli coś wprowadzimy, a następnie naciśniemy klawisze strzałek, przewijamy tylko polecenia historii, zaczynając od tego, co mamy. To naprawdę wygodne, ale w terminalu powłoki to nie działa.
Czy jest jakiś sposób na uzyskanie podobnej funkcji w terminalu powłoki? I jakieś inne wskazówki dotyczące poprawy wydajności w użyciu terminala?
bash
shell
command-history
Zawietrzny
źródło
źródło
fish
;)\e[5~
a\e[6~
, użytkowania\e[A
,\e[B
.Odpowiedzi:
To czego szukasz CtrlR.
Wpisz, CtrlRa następnie wpisz żądaną część polecenia. Bash wyświetli pierwsze pasujące polecenie. Kontynuuj pisanie, CtrlRa bash przejdzie przez poprzednie pasujące polecenia.
Aby wyszukiwać wstecz w historii, wpisz CtrlSzamiast tego. (Jeśli CtrlSto nie działa, oznacza to prawdopodobnie, że musisz wyłączyć kontrolę przepływu XON / XOFF: aby to zrobić, uruchom
stty -ixon
.)Jest to udokumentowane w części „Wyszukiwanie” w
man bash
.źródło
Ctrl-Q
wyjść z zamrożonego stanu, jeśli już uderzyłeś,Ctrl-S
nie wyłączając najpierw kontroli przepływu, a terminal został zamrożony.Umieść je w
~/.inputrc
:Tworzą Page Upi Page Downzachowują się tak, jak chcesz. (Niektóre dystrybucje już to skonfigurowały.) Osobiście uważam, że te sposoby są wygodniejsze niż Ctrl+ Rlub
history
.źródło
~/.inputrc
lub/etc/inputrc
plik, do którego odwołuje się zmienna środowiskowa,$INPUTRC
to plik konfiguracyjny do edycji linii wszystkich aplikacji korzystających z readline, w tym bash (twoja powłoka). Ma pewne wbudowane możliwości edycji linii, w tym te dwa: w ręcznym wyszukiwaniu stron bash jednego z tych słów kluczowych, aby dowiedzieć się więcej.\e[5~
/\e[6~
to sekwencje specjalne generowane przez klawisze Page Up / Down w większości emulatorów terminali; aby go zobaczyć, uruchomcat
polecenie, a następnie naciśnij te klawisze (bajt Escape jest reprezentowany w terminalu jako^[
, w inputrc as\e
).echo $INPUTRC
, jest puste. Używam Ubuntu 14.04"\e[A": history-search-backward
"\e[B": history-search-forward
Oprócz historii i-search ^ r / ^:
alt.wstawia ostatnie „słowo” poprzedniego polecenia pod kursorem. Powtórz to, aby uzyskać ostatnie słowo ze starszych poleceń. (Zauważ jednak, że
&
ostatni znak jest ostatnim słowem dla poleceń w tle).Jest to bardzo przydatne dla
mkdir foo
,cd
Alt-kropka. Nawet szybciej niż strzałka w górę ^ a, alt-d (usuwanie naprzód słowo)cd
.Aby uzyskać słowo od drugiego do ostatniego, użyj
esc
-
2
alt+.
(tzn. Użyj argumentu numerycznego w stylu emacsa doalt+.
. Negatywne liczy się od końca, pozytywne liczy się od początku.) Ale to zwykle jest więcej kłopotów niż jest warte; w pewnym momencie szybciej jest sięgnąć po mysz i skopiować / wkleić lub strzałkę w górę i ^ w / ^ y jej część (patrz poniżej).Jeśli twój terminal jest skonfigurowany ładnie / poprawnie, ctrl-lewy i ctrl-prawy będą przewijać słowa do tyłu / do przodu. Jeśli nie, mam nadzieję, że przynajmniej Alt-B i Alt-F zrobią to samo.
ctrl- / jest cofnięciem. Możesz użyć automatycznego powtarzania do usuwania słów o wiele bardziej efektywnie, jeśli możesz cofnąć, gdy nieco przekroczysz limit.
Bardziej wydajne mieszanie / dopasowywanie poleceń pochodzi z użycia pierścienia zabijania, który działa tak samo jak w Emacsie. ctrl-y, aby wkleić ostatnie ctrl-w / ctrl-u / ctrl-backspace / alt-d. Alt-y, aby przewijać starszy zabity tekst.
Wiele kombinacji klawiszy Ctrl-W lub cokolwiek z rzędu robi się przy wejściu Kill-Ring. Użyj lewej i prawej strzałki lub czegoś, aby rozbić wpis, jeśli chcesz usunąć dwie rzeczy i wkleić tylko jedną później.
Łącząc je wszystkie razem, możesz
alt+r
przywrócić go do stanu sprzed usunięcia części.>
aby przejść do końca historii (tj. strzałka w dół do końca), aby wrócić do polecenia, w którym się znajdowałeś.Inne wskazówki dotyczące interaktywnego użytkowania:
Włącz
shopt -s globstar
, abyś mógł to zrobić**/*.c
(rekurencyjne, w tym bieżący katalog). Czasami przydatny do użytku interaktywnego, ale zwyklefind -name '*.c' -exec foo {} +
jest lepszy.Jeśli piszesz skrypty bash, przydaje się również
shopt -s extglob
włączenie ich w interaktywnych powłokach. Będziesz czasami znaleźć zastosowanie do rzeczy, jak*.!(c|h)
dopasować pliki, które nie kończą się .c lub .h.Znajdź dla aliasów chcesz
ls -l
,less
i coś jeszcze dużo zrobić. (cp -i
,mv -i
irm -I
są ładne. Nie przyzwyczajaj się do polegania na nich, aby robić selektywne rm. GNU rm's-pytam raz o wszystkie argumenty.)Lubię
alias m=less
(m dla „więcej”). Mamless
skonfigurować z ,i .zobowiązany do poprzedniego / następnego pliku (lesskey
). Domyślnie jest to sekwencja wielokrotnego naciskania, której nie można używać z autorepeat.Lubię robić wszystko na ekranie GNU. Śledzenie numerowanych okien ekranowych jest dla mnie łatwiejsze niż mnóstwo kart w Konsole (lub innym emulatorze terminala, którego próbowałem). Jeśli jeszcze tego nie wiesz
screen
, naucz się tmux, ponieważ jest nowszy i mniej kruchy.Aby uzyskać coś takiego jak funkcjonalność otwierania nowej powłoki z tym samym cwd co inna powłoka, używam niestandardowego haka dla cd / pushd / popd, który pozwala mi
cds 8
na cd do dowolnego katalogu, którego używa moja powłoka w oknie ekranowym 8. Działa to nawet w przypadku powłok poza sesją ekranową, o ile istnieje tylko jedna sesja ekranowa.źródło
gnome-terminal
w Ubuntu 14.04, zanim przełączyłem się na KDE. Odpowiednia opcja znajduje się w ustawieniach terminala, prefiksie esc vs high-bit, a może w niektórych innych ustawieniach. Niektóre z nich nie działają idealnie dla mnie przez ssh. (np. ctrl w lewo / prawo munge kod ucieczki dla klawisza strzałki, i5D
pojawia się dosłownie)Dodaj następujące wiersze do swojego
~/.inputrc
Jest to podobne do odpowiedzi egmonta, ale zamiast używać Page Up i Page Down, wykorzystuje sekwencje specjalne dla Arrow Up i Arrow Down. Ten sposób jest znacznie wygodniejszy w użyciu na komputerze Mac.
źródło
Zawsze mam tendencję do konfigurowania moich maszyn z dużą wartością HISTSIZE, więc utrzymuje dłuższą listę historii, a także HISTTIMEFORMAT z wartością znacznika czasu, dzięki czemu mogę zobaczyć, kiedy polecenie zostało uruchomione.
źródło
Zazwyczaj używam środków, aby połączyć
history
polecenie zgrep
TO ZNACZY:
To wyświetli ponumerowaną historię poleceń, które wpisałeś, które zawierają to polecenie, możesz następnie użyć:
aby powtórzyć to polecenie.
TO ZNACZY:
history | grep history
śledzony przez:
!571
powtórzy się
history | grep history
źródło
!
podstawienie historii jest mniej bezpieczne.Codziennie korzystałem z 4 porad (i kilku innych) w moim terminalu bash:
Wykonaj ostatnie polecenie:
!!
Wykonaj polecenie N z historii:
!N
Wydrukuj ostatnie polecenie zaczynające się od prefiksu z historii:
!prefix:p
Wykonaj ostatnie polecenie, zaczynając od prefiksu z historii:
!prefix
źródło
Jeśli możesz użyć
zsh
zamiastbash
siebie stożka, użyj do tego oh-my-zsh .Zawiera strzałkę w górę nawigacji w historii poleceń. Pozwala również na tę samą nawigację, gdy już wpisałeś tekst (jak Mathlab).
edycja: Zawiera także inne rzeczy przeznaczone dla programistów, takie jak aliasy i motywy. Te dodatki sprawiają, że dystrybucja jest większa i bardziej złożona w użyciu.
https://github.com/robbyrussell/oh-my-zsh
źródło
oh-my-zsh
zawiera mnóstwo rzeczy. Równie dobrze możesz powiedzieć: ta dokładna funkcja jest zawarta w tej dystrybucji, gdy wszystko, czego potrzebujesz, to określone ustawienie lub aplikacja.Dodaj następujący alias do ~ / .bashrc
Użycie:
h fire
otrzymam listę poleceń zawierających ogień . lubh ^fire
dostanę listę poleceń zaczynających się od ognia .Jest to przydatne, gdy chcę wyświetlić serię poleceń jednocześnie.
Nawiasem mówiąc,
'"'"'
jest brzydka, ale nie mogłem znaleźć innych sposobów na uniknięcie pojedynczych cudzysłowów w pojedynczych cudzysłowach.źródło
h="history | awk '{\$1=\"\"; print}'
powinno działać. alternatywnie utwórz funkcję i wywołaj ją.