iPython Like Historia poleceń dla powłoki

24

Dla tych z was, którzy nie programują w Pythonie na Ubuntu, ipython jest powłoką Pythona na sterydach, ale ma tę niesamowitą funkcję, że nie tylko wykonuje się automatycznie na podstawie znanych nazw (tj. W ten sam sposób, w jaki bash robi po naciśnięciu klawisza Tab), ale jeśli zaczniesz wpisywać polecenie i naciśniesz w górę, nie przewinie ono całej historii (jak bash), ale tylko ostatnie polecenia, które zaczęły się od tego samego ciągu liter.

Więc jeśli wykonałeś jakieś długie polecenie, takie jak scp -r -P 8000 -l user server.com:~/dir/to/copy ./kilka innych poleceń. Jeśli zaczniesz pisać scpi naciskasz, bash wyświetli pokazane wcześniej polecenie zamiast przewijać całą historię.

Czy istnieje takie rozszerzenie dla bash? czy jest jakaś powłoka, która oferuje taką funkcję?

poważny
źródło

Odpowiedzi:

26

Bash ma również tę funkcję, ale domyślnie nie jest włączona. Możesz powiązać go z kursorem w górę / w dół, umieszczając to w ~/.inputrc:

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

Wolę powiązać go z Ctrl+ w górę / w dół:

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

edycja: Aby zachować ctrl+lefti ctrl+rightprzesuwać w przód i w tył całymi słowami, dołącz również następujące wiersze w ~/.inputrcpliku:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
ak2
źródło
Korzystając z tej wskazówki, teraz nie mogę używać Ctrl + lewo / prawo w terminalu, aby przejść do następnego / poprzedniego słowa, co psuje mi cały cel. Może istnieje obejście?
zetah
@zetah Zredagowałem w odpowiedzi moje obejście dotyczące przenoszenia słów
wim 12'13
1
Aby zachować wszystkie wartości domyślne, możesz również dodać $include /etc/inputrc, najlepiej w pierwszym wierszu.
Tulio Casagrande,
9

Spróbuj nacisnąć Ctrl+ Ri wpisać kilka liter. Działa również w odwrotnej kolejności.

mgunes
źródło
6

I nie zapomnij o fantastycznych skrótach do rozszerzania historii w bash. 1

Zamieszczam kilka fragmentów strony, na wypadek, gdyby nie wytatuowałeś ich na ramieniu (lub nie zapamiętałeś ich).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Często korzystam z możliwości odwołania się do ostatniego „słowa” poprzedniego polecenia. Na przykład,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

W obu przypadkach tutaj !$mecze /foo/shmoo/adir.horribilus.foo.


1 ... które zostały pobrane z csh. Aby ograniczyć zakres kradzieży funkcji bash, strona podręcznika bash mówi

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Jest więc „podobny”. Wszystko to może się włamać cshlub tcsh. Lub cokolwiek potomka csh nie używasz ze względu na fakt, że nie jest tak wspaniały jak bash.

Belacqua
źródło
0

Istnieje alternatywa podobna do wspomnianej powyżej @ ak2 , ale nie trzeba tworzyć nowego pliku .inputrc.

Zamiast tego, jeśli masz uprawnienia sudo, możesz włączyć to w pliku / etc / inputrc. W tym pliku znajdują się różne ustawienia klawiatury, w tym funkcja wyszukiwania historii (przynajmniej 18.04). Fragment / etc / inputrc to:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Po prostu odkomentuj dolne dwa wiersze za pomocą edytora plików sudo (np. $ Sudo vim), a nowa sesja terminalowa będzie miała funkcję wyszukiwania historii (dla wszystkich użytkowników).

wstępni
źródło