Cerca un comando precedente con lo stesso prefisso quando premo Su al prompt della shell


19

Proveniente da un mondo di FreeBSD, desidero che il terminale Linux si comporti come quello di FreeBSD, in particolare la versione 9.1, fondamentalmente quando si digita cdil terminale e si preme la freccia "su" è possibile sfogliare tutti i comandi nella cronologia a partire da cdquale ti rende guadagnare molto tempo.

Non so come abilitare questa funzione in Linux Debian o CentOS che mi costringe a digitare il tutto, qualcuno potrebbe aiutare.


7
Questa è una funzione della shell, non del terminale. Quale shell stai usando in FreeBSD? Potresti essere in grado di ottenere la stessa (o simile) shell per Linux.
cjm,

Sto usando la shell tcsh.
Abdelilah Benaou,

2
Sto usando tcsh su OS X e non ho avuto questo comportamento dall'aspetto pratico ... Dopo alcune ricerche, ho scoperto di poterlo abilitare inserendo il bindkey -k (up|down) history-search-(back|for)wardmio .tcshrc come descritto qui . Freddo!
Garrett Albright,

Risposte:


34

Aggiungi a quanto segue a ~/.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

Spiegazione

~/.inputrcè il file di configurazione per GNU readline . Molte shell, incluso bashe tcshusano readline per la modifica della riga di comando. Le due righe sopra diranno a readline di invocare la sua funzionalità di ricerca della cronologia quando si incontrano le sequenze di escape per il tasto freccia su ( \e[A) e il tasto freccia giù ( \e[B).


Mi piace aggiungere F12 per mettere l'ultima parola dell'ultima riga alla fine del comando corrente. Last wordè spesso un percorso che voglio provare in vari cliché arcani. E Shift F12 per rimettermi a modificare l'intera ultima riga dall'inizio. ~/.inputrcè uno strumento utile.
jalanb,

Lo Shift F12 richiede la modalità vi .
jalanb,

6

Quello che sta succedendo è che FreeBSD e Linux usano diverse shell di default. Per impostazione predefinita FreeBSD è tcsh , che in passato aveva funzioni interattive migliori di bash (ma bash ha recuperato) ma funzionalità di scripting notevolmente peggiori .

Il modo più semplice per ottenere l'ambiente a cui sei abituato sarebbe passare la shell a tcsh su Linux. A condizione che tcsh sia installato a livello di sistema (in caso contrario, chiedi all'amministratore di sistema di installarlo), esegui chsh -s tcshper modificare la shell predefinita.

In alternativa, puoi impostare bash per avere questo comando a cui sei abituato. Per impostazione predefinita, le frecce Upe Downnavigano tra tutti i comandi nella cronologia, non solo quelli che iniziano con il prefisso che hai digitato. Per cambiarlo nel comportamento a cui sei abituato, inserisci le seguenti righe nel file di inizializzazione di bash, che si trova .bashrcnella tua home directory. Eseguire . ~/.bashrco avviare una nuova shell per rileggere il file di inizializzazione.

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

Le sequenze di escape sono ciò che il terminale invia alla shell quando si preme un tasto freccia. Uppuò essere \eOA(fuga, O, A) oppure \e[Aa seconda del terminale, e allo stesso modo per Down.

Per impostazione predefinita, bash offre diverse combinazioni di tasti per la ricerca nella cronologia dei comandi. Puoi premere Ctrl+ R, quindi inserire alcuni caratteri per cercare un comando contenente questa sottostringa in qualsiasi punto della linea. Premi Ctrl+ Sper andare avanti anziché indietro. La ricerca è incrementale (es. Mentre si digita); Alt+ Pe Alt+ Nti danno una ricerca non incrementale.

Invece di bash e tcsh, potresti passare a zsh, che ha alcune caratteristiche pulite che non si trovano in altre shell . Zsh ha Ctrl+ Re Ctrl+ Sdi default proprio come bash. Per ottenere Upe Downcome hai avuto in tcsh, inserisci le seguenti righe ~/.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

Se vuoi usare la stessa shell ovunque, puoi usare bash o zsh anche su FreeBSD, a condizione che la porta sia installata (di nuovo, chiedi al tuo amministratore di sistema).


1

tcshè disponibile per la maggior parte delle distribuzioni Linux. Prova a installare il tcshpacchetto, quindi eseguilo chsh -s /bin/tcshper renderlo la tua shell predefinita.


1
Oppure potresti prendere in considerazione il passaggio a bash (l'ho fatto).
Keith Thompson,

1

Altre risposte lo affrontano, ma se vuoi di più, dai un'occhiata a https://github.com/zsh-users/zsh-history-substring-search

Prezto ( https://github.com/sorin-ionescu/prezto ) è anche pieno di chicche zsh.


Grazie per la tua risposta, a proposito non vedo ancora quali vantaggi hanno zsh rispetto a bash o tcsh?
Abdelilah Benaou,

1
Hum, puoi fare praticamente ogni cosa di base in tutte queste shell. Uso zsh a causa del bundle prezto abbastanza ben mantenuto (probabilmente il grande cambio di gioco), del prompt giusto (che è funzionalità esclusiva) e perché sembra più raffinato di bash (consacrazione e cose).
Fuad Saud,
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.