Wyszukaj poprzednie polecenie z tym samym prefiksem, gdy naciskam klawisz Up w wierszu polecenia


19

Pochodząc ze świata FreeBSD, chcę, aby terminal Linuksa zachowywał się jak FreeBSD, szczególnie wersja 9.1, w zasadzie po wpisaniu cdterminala i naciśnięciu strzałki „w górę” możesz przeglądać wszystkie polecenia w historii, od cdktórych zaczyna się zyskać dużo czasu.

Nie wiem, jak włączyć tę funkcję w Linuksie Debian lub CentOS, która zmusza mnie do napisania całości, czy ktoś mógłby mi pomóc.


7
To funkcja powłoki, a nie terminala. Jakiej powłoki używasz w FreeBSD? Możesz mieć tę samą (lub podobną) powłokę dla Linuksa.
cjm 17.10.13

Używam powłoki tcsh.
Abdelilah Benaou

2
Korzystam z tcsh w OS X i nie miałem tego poręcznego zachowania… Po kilku poszukiwaniach odkryłem, że mogę to włączyć, wprowadzając bindkey -k (up|down) history-search-(back|for)wardmoje, .tcshrc jak opisano tutaj . Chłodny!
Garrett Albright

Odpowiedzi:


34

Dodaj do następujących elementów ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Wyjaśnienie

~/.inputrcto plik konfiguracyjny dla readline GNU . Wiele powłok, w tym readline do edycji w wierszu poleceń bashi tcshkorzysta z nich. Dwie linie powyżej powiedzą readline, aby wywołała funkcję wyszukiwania historii, gdy napotkane zostaną sekwencje specjalne dla klawisza strzałki w górę ( \e[A) i klawisza strzałki w dół ( \e[B).


Lubię dodać F12, aby umieścić ostatnie słowo ostatniego wiersza na końcu bieżącego polecenia. Last wordjest często ścieżką, którą chcę wypróbować w różnych tajemniczych kliszach. I Shift F12, żeby przywrócić mnie do edycji ostatniej linii od samego początku. ~/.inputrcjest przydatnym narzędziem.
jalanb

SHIFT F12 jeden wymaga trybu vi .
jalanb

6

Dzieje się tak, że FreeBSD i Linux domyślnie używają różnych powłok. Domyślnym FreeBSD jest tcsh , który miał lepsze funkcje interaktywne niż bash w przeszłości (ale bash nadrobił zaległości), ale znacznie gorsze funkcje skryptowe .

Najprostszym sposobem na uzyskanie środowiska, do którego przywykłeś, byłoby przełączenie powłoki na tcsh w systemie Linux. Pod warunkiem, że tcsh jest zainstalowany w całym systemie (jeśli nie jest, poproś administratora systemu o zainstalowanie go), uruchom, chsh -s tcshaby zmienić domyślną powłokę.

Alternatywnie możesz skonfigurować bash, aby mieć to polecenie, do którego jesteś przyzwyczajony. Domyślnie strzałki Upi Downporuszają się między wszystkimi poleceniami w historii, a nie tylko tymi, które zaczynają się od wpisanego prefiksu. Aby zmienić to na zachowanie, do którego jesteś przyzwyczajony, umieść następujące wiersze w pliku inicjującym bash, który znajduje się .bashrcw twoim katalogu domowym. Albo uruchomić . ~/.bashrclub uruchomić nową powłokę do ponownego odczytania pliku inicjalizacji.

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

Sekwencje specjalne są wysyłane przez terminal do powłoki po naciśnięciu klawisza strzałki. Upmoże być \eOA(escape, O, A) lub \e[Aw zależności od terminala, a podobnie do Down.

Domyślnie bash oferuje różne powiązania klawiszy do przeszukiwania historii poleceń. Możesz nacisnąć Ctrl+ R, a następnie wprowadzić kilka znaków, aby wyszukać polecenie zawierające ten podciąg w dowolnym miejscu wiersza. Naciśnij Ctrl+, Saby przejść do przodu zamiast do tyłu. Wyszukiwanie jest przyrostowe (tzn. Podczas pisania); Alt+ Pi Alt+ Nzapewniają wyszukiwanie nie przyrostowe.

Zamiast bash i tcsh, możesz przełączyć się na zsh, który ma pewne fajne funkcje, których nie ma w innych powłokach . Zsh ma Ctrl+ Ri Ctrl+ Sdomyślnie tak jak bash. Aby uzyskać Upi Downtak jak w tcsh, wstaw następujące wiersze ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Jeśli chcesz wszędzie używać tej samej powłoki, możesz także użyć bash lub zsh na FreeBSD, pod warunkiem, że port jest zainstalowany (ponownie zapytaj administratora systemu).


1

tcshjest dostępny dla większości dystrybucji Linuksa. Spróbuj zainstalować tcshpakiet, a następnie uruchom chsh -s /bin/tcshgo, aby ustawić go jako domyślną powłokę.


1
Lub możesz rozważyć przejście na bash (zrobiłem).
Keith Thompson

1

Inne odpowiedzi rozwiązują ten problem, ale jeśli chcesz więcej, spójrz na https://github.com/zsh-users/zsh-history-substring-search

Prezto ( https://github.com/sorin-ionescu/prezto ) jest również pełne gadżetów zsh.


Dziękuję za odpowiedź, a propos, nadal nie widzę, jakie korzyści mają Zsh w stosunku do bash lub tcsh?
Abdelilah Benaou

1
Hum, możesz robić prawie wszystkie podstawowe rzeczy we wszystkich tych powłokach. Używam zsh ze względu na dość dobrze utrzymany pakiet prezto (prawdopodobnie duży zmieniacz gier), odpowiedni monit (który jest wyłączną funkcją) i ponieważ wydaje się bardziej dopracowany niż bash (konsiguracja i inne rzeczy).
Fuad Saud
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.