Uzupełnianie wiersza poleceń z historii poleceń


84

Tak więc patrzyłem na historię i na Ctrl+ R, ale nie są to, o czym myślałem, że wiem. Czy istnieje sposób na wpisanie na początku polecenia i przechodzenie między meczami w mojej historii za pomocą skrótu?

# mysq(some shortcut key)

Daje mi:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p

Uwaga dodatkowa: Dla tty bez pulpitu istnieje „<kbd> Alt + Tab </kbd>”.
neverMind9

Odpowiedzi:


90

Naciśnięcie Ctrl+ Rotworzy wyszukiwanie historii do tyłu. Teraz zacznij pisać polecenie, to da pierwsze dopasowanie. Naciskając Ctrl+ Rponownie (i ponownie), możesz przeglądać historię.

mysq(Ctrl+R)

Dałby:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rponownie:

mysql -u ben.dauphinee -p

5
Dzięki. Ponadto Esc umieści wybrane polecenie w wierszu polecenia bez wykonania, natomiast Enter uruchomi wybrane polecenie.
Ben Dauphinee

3
Uważam, że CTRL + E jest do tego lepszy niż ESC, ponieważ ucieczka jest trudna do sięgnięcia, ale już uderzam CTRL + R, więc E jest tutaj. Ustawia to również kursor na końcu linii, co jest przydatne w przypadku, gdy chciałem coś zmienić (np. Nazwę pliku), co uważam za powszechny przypadek.
Sorpigal

Niestety, nie działa na Cygwin
ATorras

2
Przynajmniej na mysq(CTRL+R)(CTRL+R)Macu wydaje się, że nie przechodzi przez polecenia zaczynające się od „mysq”. Trzeba zrobić, (CTRL+R)mysq(CTRL+R)zamiast
BlueRaja - Danny Pflughoeft

62

Aby rozwinąć to, co powiedział Gilles, mam następujące .inputrcprzypisania do klawiszy strzałek w górę / w dół history-search-backwardi history-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Po prostu wpisz coś (opcjonalnie), a następnie naciśnij klawisz strzałki w górę / w dół, aby przeszukać historię poleceń, które zaczynają się od tego, co wpisałeś.

Aby to zrobić .bashrczamiast .inputrc, możesz użyć:

bind '"\e[A": history-search-backward'

3
te wiązania należą do ~ / .inputrc ... dzięki za wsparcie mojego lenistwa.
Martin Zeitler,

Warto zauważyć, że „\ e” jest kluczowe, przynajmniej dla debiutantów bash. Samo naciśnięcie Ctrl-V, aby uzyskać naciśnięcie klawisza, nie mówi całej historii. Na przykład wpisanie Ctrl-V Meta-P (tj. Alt-P) zwraca ^ [p - aby uzyskać pożądane zachowanie, zamień „^ [” na „\ e”.
MrMas

Zgadzam się z @syslogic - wstaw linie w .inputrc i upuść powiązanie i pojedyncze cudzysłowy.
MrMas

kopiowanie-wklejanie tego do .inputrc na osx, otrzymuję: source ~ / .inputrc -bash: \ e [A :: polecenie nie znaleziono -bash: \ e [B :: polecenie nie znaleziono -bash: \ eOA :: polecenie nie znaleziono -bash: \ eOB :: polecenie nie znaleziono
Walrus the Cat

1
Zobacz superuser.com/questions/241187/how-do-i-reload-inputrc . Nie możesz pobrać pliku.
raychi

7

Możesz także nacisnąć PAGEUPprzycisk, aby automatycznie wykonać polecenie. Zasadniczo przeszukuje bash_historyplik.


Musisz odkomentować dwa wiersze /etc/inputrclub dodać te dwa wiersze do $HOME/.inputrcpliku: "\e[5~": history-search-backward "\e[6~": history-search-forward
garlix,

5

Możesz używać poleceń readline history-search-backwardi history-search-forwardnawigować między wierszami poleceń, zaczynając od już wpisanego prefiksu. Żadne z tych poleceń nie są powiązane z kluczami w domyślnej konfiguracji.

Zsh (zle) ma podobne polecenia history-beginning-search-backwardi history-beginning-search-forwardrównież domyślnie nie jest powiązany z klawiszami. Istnieją również history-search-backwardi history-search-forward, które używają pierwszego słowa bieżącego polecenia jako prefiksu do wyszukiwania niezależnie od pozycji kursora.


4

Jeśli chcesz mieć dobry przegląd bardzo podobnych poleceń, możesz uzyskać listę z:

history|grep KEYSTRING

Następnie skopiuj i wklej środkowym przyciskiem myszy.

Rgds - Joe

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.