Come scorrere la ricerca inversa in BASH?


444

Nel terminale, posso digitare CTRL-Rper cercare un comando corrispondente precedentemente digitato in BASH. Ad esempio, se scrivo, CTRL-Rallora grepelenca il mio ultimo grepcomando e posso premere invio per usarlo. Questo dà solo un suggerimento però. Esiste un modo per scorrere altri comandi di corrispondenza precedentemente digitati?

Risposte:


598

Se capisco correttamente la domanda dovresti essere in grado di scorrere le alternative colpendo ripetutamente Ctrl+R.

Per esempio:

Ctrl+R grep Ctrl+R Ctrl+R ...

Che cerca indietro nella tua storia. Per andare avanti invece, usa Ctrl+S, ma potrebbe essere necessario aver impostato: stty -ixon(da .bash_profileo manualmente) prima di quello per disabilitare la funzione XON / XOFF che prende il sopravvento Ctrl+s. (Maggiori dettagli qui .)


23
+1 - FYI - puoi anche cercare in avanti secondo questa risposta StackOverflow .
Jordan Arseno,

7
E usa Ctrl + Maiusc + r per lo scorrimento inverso se ti capita di passare.
wiswit

19
@wiswit CTRL+SHIFT+rnon funziona per me.
Maxim Suslov,

9
@MaximSuslov Vedi questa domanda: stackoverflow.com/questions/791765/… Puoi aggiungere [[ $- == *i* ]] && stty -ixonal tuo .bashrc e poi CTRL+slavorerai come il contrario diCTRL+r
gla3dr

9
@JordanArseno Per "ricerca in avanti" intendevo "ricerca di comandi che non ho ancora digitato"
Josh Johnson,

234

Se ritieni che il comando verrà utilizzato di frequente, puoi aggiungere un tag

comando #utile

Poi

ctrl+r #useful

Questo funziona perché #è un delimitatore di commento, ovvero tutto ciò che viene dopo il simbolo non viene interpretato come un comando. Tuttavia, sarà registrato nella storia ed è quindi ricercabile.


5
Di solito mi piace questo tipo di tag. #trg_bld #open_log
Makesh

1
dove aggiungere questo tag?
Sudip Bhandari,

5
@SudipBhandari subito dopo il tuo comando. # inizia un commento. Per esempio ls -lah #useful
Andrei il

Unix aveva hashtag prima che fosse bello :)))
Bobby Marinoff

47

Puoi anche impostare le frecce su e giù per fare una ricerca leggermente diversa aggiungendo queste righe a ~ / .inputrc:

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

Invece di cercare una sottostringa ovunque nel comando (come Ctrl-r ) cercherà un comando che inizia con il testo a sinistra del cursore . Ad esempio, se eseguo questi comandi:

$ ls bart
$ ls fools

quindi digitare lse premere Updue volte, mostrerà ls barte il cursore nella stessa posizione. Confronta con Ctrl- r, dove troverebbe il lsdoppio nell'ultima riga, quindi dovresti premerlo ancora una volta per trovare la riga precedente.

Questi approcci hanno entrambi i loro punti di forza ed entrambi possono risparmiare molto tempo.


2
Questo è anche standard su OS X, quindi non è necessario creare ~/.inputrce aggiungere quelle due linee.
DASKAjA,

1
Come ha scritto falconepi nei commenti di questa risposta , su Ubuntu devi solo decommentare nelle ~/.inputrcdue righe tra cui la ricerca della storia- *
Arpad Horvath

Puoi anche guardare questo post per maggiori dettagli su questa risposta: codeinthehole.com/writing/…
Andrei

Questo non era standard sul mio macOS (10.13). Mi è sempre mancata questa funzionalità!
forthrin

una cosa positiva di questo è che puoi ancora usare ctrl-p / ctrl-n per scorrere regolarmente la cronologia
elezione

0

C'è un sostituto per built-in Ctrl + Rchiamato hstr . Permette di cercare nella cronologia dei comandi abbinando tutti i token di ricerca contemporaneamente (tra le altre cose) e scorrere i risultati usando i tasti freccia:

Esempio

Ecco uno screencast demo .

Può essere installato su un sistema operativo della famiglia Debian come:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

E quindi utilizzare Ctrl + R(dopo aver riaperto il terminale).

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.