Configurare la freccia su per sfogliare i comandi con gli stessi caratteri iniziali anziché tutti i comandi precedenti


15

Sulla bashriga di comando, ↑mi dà il comando precedente. Sulla riga di comando in numpyo matlab, quando scrivo alcuni caratteri, ↑mi dà il comando precedentemente inserito che inizia con quei caratteri . Come posso abilitare esattamente questo comportamento in bash?

Sono a conoscenza di modi più avanzati di ricerca nella cronologia della riga di comando, ma a volte un modo semplice è più conveniente.

Risposte:


18

I comandi readline che stai cercando sono i history-search-*comandi:

history-search-forward
Cerca in avanti nella cronologia la stringa di caratteri tra l'inizio della riga corrente e la posizione corrente del cursore (il punto). Questa è una ricerca non incrementale.
history-search-backward
Cerca indietro nella cronologia la stringa di caratteri tra l'inizio della riga corrente e il punto. Questa è una ricerca non incrementale.

Vincolando questi nel tuo .inputrc, in questo modo:

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

ti permetterà di inserire i primi caratteri di un comando, quindi usa i tasti Upe Downper muoverti solo attraverso quei comandi .bash_historyche iniziano con quella stringa.

Ad esempio, immettendo vie Upverrebbe portato al primo comando precedente che inizia con vi, come vim somefile. L'immissione Upporterebbe alla prossima istanza precedente e così via.

Puoi leggere di più su tutti i collegamenti readline qui: http://linux.about.com/library/cmd/blcmdl3_readline.htm


10

Aggiungi quanto segue al tuo .inputrc in ~ /, per fare ciò che hai suggerito:

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

Forse potresti anche voler aggiungere quanto segue al tuo .bash_profile:

export INPUTRC=~/.inputrc

Puoi spiegarci perché fare questa "esportazione"?
— texnic

2

Prepara un "!" al comando che stai cercando. Se si desidera sostituire la funzionalità delle frecce su e giù, modificare il file inputrc (come suggerito dalle altre risposte) è la strada da percorrere.

Se "comando" è il comando che stai cercando, inserisci questo:

!comm

Dovresti ottenere "comando" come output.

Allo stesso modo, se si desidera trovare un comando che includa (ma potrebbe non iniziare con) parte del comando, premere ctrl + r e quindi digitare parte del comando.

Puoi anche digitare "tab" per completare automaticamente il testo inserito (inclusi anche i file). Ciò è utile se stai cercando un comando non presente nella cronologia (o non hai un file cronologico)

Puoi leggere di più sul "mastering" del file della cronologia qui: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/

Questo è un possibile duplicato di /programming/1030182/how-do-i-change-bash-history-completion-to-complete-whats-already-on-the-line


Le altre risposte rispondono più correttamente alla mia domanda, ma grazie per il puntatore a SO (vedi anche meta.stackexchange.com/q/4708/172266 ).
— Gerrit,
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.