2013-10-14 13 views
9

C'è un modo in Vim di incollare il registro di ricerca sulla riga di comando, ma senza le parentesi 10? Spesso mi trovo a fare una ricerca in un buffer, e poi a voler usare il modello abbinato come argomento a grep (in particolare, ack.vim).Vim: incolla il registro di ricerca nella riga di comando senza parentesi.

Ecco cosa succede se si cerca foo e quindi immettere :Ack '<C-r>/ ':

:Ack '\<foo\>' 

Questo non riuscirà a trovare nulla. Quello che voglio invece è:

:Ack 'foo' 

Questo è ovviamente un esempio semplicistico. Dove questo sarebbe più prezioso è con risultati di ricerca più complessi.

Sono a conoscenza di <C-r><C-w> e <C-r><C-a> per incollare la parola/WORD sotto il cursore e spesso sono sufficienti, ma non sempre.

+1

' /' inserisce il modello di ricerca durante la digitazione. Nota che inserisce * il modello di ricerca *, non la corrispondenza: se cerchi 'foo \ d',' /'inserirà' pippo \ d', non 'pippo9'. – romainl

+0

Aha! Ciò ha senso. In questo caso, stavo testando le cose usando '*' per evidenziare solo una parola, da cui provengono le parentesi. Stavo anche provando prima con '/ pattern', che ho mappato a'/\ v', e ottenendo il risultato '\ v' nel registro di ricerca, ma non ho effettuato la connessione. Se vuoi mettere il tuo commento come risposta, sarei felice di accettarlo. –

+0

Anche per le persone interessate a questo, usare 'g *' invece di '*' otterrà il modello di ricerca senza '\ parentesi' \> 'attorno ad esso. –

risposta

8

<C-r>/ inserisce il modello di ricerca mentre lo digitavi: se lo hai fatto /foo, il registro di ricerca contiene foo.

Nota che <C-r>/ inserti il ​​modello di ricerca, non la partita: se si cerca foo\d, <C-r>/ inserirà foo\d, non foo9.

Come hai scoperto, e \<\> sono aggiunti se è stato utilizzato * o # al fine di limitare la ricerca alle parole intere. Utilizzare g* e g# a non cercare parole intere ed evitare quindi lo \<\>.

Ecco una mappatura forse utile:

nnoremap <F6> :Ack '<C-r>=expand("<cword>")<CR>' 
+0

Ottima spiegazione, ha senso .. Ho risolto questo scopo di cercare la parola evidenziata corrente usando > let g: ack_use_cword_for_empty_search = 1 nel mio vimrc, ora se corro: Ack! senza parametri, per impostazione predefinita cerca la parola che si trova nel buffer di ricerca. –

4

A meno che non stai facendo un puramente ricerca letterale, c'è una differenza tra il modello di ricerca (un'espressione regolare) e la (elenco di) partite (stringhe dal buffer).

Se sei interessato a quest'ultimo, il mio PatternComplete plugin offre il completamento della modalità di inserimento di tutte le corrispondenze e può anche inserire la prima corrispondenza dell'ultimo modello di ricerca con <C-R>&.

+0

Grazie, sembra buono. C'è un repo GitHub o qualcosa che include il plugin e tutte le sue dipendenze, in un formato compatibile con i patogeni? Se no, potrei farne uno io stesso e attaccarlo su GitHub, se non ti dispiace. –

+0

Fornito da http://vimscripts.org/: [qui] (https://github.com/vim-scripts/PatternComplete) e [la dipendenza] (https://github.com/vim-scripts/ingo -biblioteca). –

Problemi correlati