iPython come cronologia dei comandi per Shell


24

Per quelli di voi che non eseguono la programmazione Python su Ubuntu, ipython è una shell Python per gli steroidi, ma ha questa straordinaria funzione che non si completa automaticamente in base a nomi noti (cioè allo stesso modo in cui fa Bash quando si preme Tab), ma se si inizia a digitare un comando e si preme verso l'alto, non scorre l'intera cronologia (come bash) ma solo attraverso i comandi recenti che sono iniziati con la stessa stringa di caratteri.

Quindi se hai fatto qualche comando lungo come scp -r -P 8000 -l user server.com:~/dir/to/copy ./seguito da molti altri comandi. Se hai iniziato a digitare scpe premuto, bash visualizzerà il comando mostrato prima invece di scorrere l'intera cronologia.

Esiste un'estensione come questa per bash? o c'è qualche shell che offre questo tipo di funzionalità?

Risposte:


26

Bash ha anche quella funzione, ma non è abilitato per impostazione predefinita. Puoi associarlo al cursore su / giù incollandolo in ~/.inputrc:

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

Preferisco invece associarlo a Ctrl+ su / giù:

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

modifica: per conservare ctrl+lefte ctrl+rightper spostarsi avanti e indietro a parole intere, includere anche queste righe nel ~/.inputrcfile:

# 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

Usando questo suggerimento, ora non posso usare Ctrl + sinistra / destra nel terminale per saltare alla parola successiva / precedente, che rovina tutto lo scopo per me. Forse c'è una soluzione?
zetah,

@zetah Ho modificato la risposta alla mia soluzione alternativa per lo spostamento di parole
wim

1
Per preservare tutte le impostazioni predefinite è anche possibile aggiungere $include /etc/inputrc, preferibilmente sulla prima riga.
Tulio Casagrande,

9

Prova a premere Ctrl+ Re a digitare alcune lettere. Funziona anche nell'ordine inverso.


6

E non dimenticare le fantastiche scorciatoie di espansione della storia in bash. 1

Sto postando alcuni estratti dalla manpage, nel caso in cui non li abbia tatuati sul braccio (o li abbia memorizzati).

   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.

Uso spesso la possibilità di fare riferimento all'ultima "parola" del comando precedente. Per esempio,

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

In entrambi i casi qui, le !$partite /foo/shmoo/adir.horribilus.foo.


1 ... che sono stati presi da csh. Per mitigare l'ambito del furto di funzionalità di bash, dice la pagina man di bash

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

Quindi, è "simile". Tutto ciò potrebbe entrare csho tcsh. O qualunque discendente csh non stai usando a causa del fatto che non è meraviglioso come bash.


0

Esiste un'alternativa simile a ciò che @ ak2 menzionato sopra , ma non è necessario creare un nuovo file .inputrc.

Invece, se si dispone delle autorizzazioni sudo, è possibile abilitarlo nel file / etc / inputrc. In questo file ci sono varie impostazioni della tastiera inclusa la funzione di ricerca della cronologia (almeno per 18.04). L'estratto di / etc / inputrc è:

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

Basta decommentare le due righe inferiori usando un editor di file sudo (ad esempio $ sudo vim) e una nuova sessione terminale avrà la funzione di ricerca della cronologia (per tutti gli utenti).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.