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.