Skonfiguruj strzałkę w górę, aby przeglądać polecenia z takimi samymi początkowymi znakami, a nie wszystkimi poprzednimi

15

W bashwierszu polecenia daje mi poprzednie polecenie. W wierszach poleceń w numpylub matlab, gdy wpisuję kilka znaków, podaje mi poprzednio wprowadzone polecenie, zaczynając od tych znaków . Jak mogę włączyć dokładnie takie zachowanie bash?

Zdaję sobie sprawę z bardziej zaawansowanych sposobów przeszukiwania historii wiersza poleceń, ale czasami prosty sposób jest wygodniejszy.

gerrit
źródło

Odpowiedzi:

18

Polecenia readline, których szukasz, to history-search-*polecenia:

historia-wyszukiwanie-do przodu
Przeszukuj historię w przód, aby znaleźć ciąg znaków między początkiem bieżącej linii a bieżącą pozycją kursora (punkt). To jest wyszukiwanie nie przyrostowe.
history-search-backward
Przeszukuj historię ciągu znaków od początku bieżącego wiersza do punktu. To jest wyszukiwanie nie przyrostowe.

Wiążąc je w swoim .inputrc, tak:

"\e[A": history-search-backward            # arrow up
"\e[B": history-search-forward             # arrow down

pozwoli ci wprowadzić pierwsze znaki polecenia, a następnie użyć klawiszy Upi Down, aby poruszać się tylko w tych poleceniach, .bash_historyktóre zaczynają się od tego ciągu.

Na przykład wprowadzenie vii Upprzejście do pierwszego poprzedniego polecenia rozpoczynającego się od vi, np vim somefile. Wpisanie Upzabierze Cię do następnej poprzedniej instancji i tak dalej.

Możesz przeczytać więcej o wszystkich powiązaniach readline tutaj: http://linux.about.com/library/cmd/blcmdl3_readline.htm

jasonwryan
źródło
10

Dodaj do swojego .inputrc w ~ /, aby zrobić to, co zasugerowałeś:

"\e[B": history-search-forward
"\e[A": history-search-backward

Być może możesz także dodać następujące elementy do pliku .bash_profile:

export INPUTRC=~/.inputrc
johankj
źródło
Czy możesz wyjaśnić, dlaczego ten „eksport”?
texnic
2

Przygotuj „!” na polecenie, którego szukasz. Jeśli chcesz zastąpić funkcjonalność strzałek w górę i w dół, najlepiej jest zmodyfikować plik inputrc (jak sugerują inne odpowiedzi).

Jeśli „polecenie” jest poleceniem, którego szukasz, wpisz:

!comm

Powinieneś otrzymać „polecenie” jako wynik.

Podobnie, jeśli chcesz znaleźć polecenie, które zawiera (ale może nie zaczynać) część polecenia, naciśnij ctrl + r, a następnie wpisz część polecenia.

Możesz także wpisać „tab”, aby automatycznie uzupełnić wprowadzony tekst (dotyczy to również plików). Jest to przydatne, jeśli szukasz polecenia spoza swojej historii (lub nie masz pliku historii)

Więcej informacji na temat „masteringu” pliku historii można znaleźć tutaj: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/

Jest to możliwy duplikat /programming/1030182/how-do-i-change-bash-history-completion-to-complete-whats-already-on-the-line

Rzeczywistość
źródło
Inne odpowiedzi bardziej poprawnie odpowiadają na moje pytanie, ale dziękuję za wskaźnik do SO (zobacz także meta.stackexchange.com/q/4708/172266 ).
gerrit