2010-10-21 2 views
12

Dopo aver cercato qualcosa, se si preme //, sembra che si ottenga il risultato successivo. In che modo è diverso da n? Come dovresti usarlo? Che cosa corrisponde //e e quali altre opzioni esistono per //?Come funziona il comando di ricerca `//` in Vim?

+11

Le domande frequenti sono abbastanza chiare: "strumenti software comunemente usati dai programmatori", quindi non penso che questo debba essere chiuso. Non vedo molti contabili o impiegati che usano Vim :-) – paxdiablo

+0

Haha, e c'è anche un intero tag dedicato a Vim. – Chetan

risposta

16

comando La ricerca è il seguente formato:

/pattern/offset<cr> 

Se la parte pattern è lasciato fuori, la ricerca guarda per l'ultima modello che è stato cercato. Se l'offset viene omesso, non viene applicato alcun offset. L'offset è fondamentalmente cosa fare al cursore una volta trovato l'articolo pattern.

La maggior parte vi utenti hanno familiarità con la variazione, senza un offset, /pax<cr> e la ripetizione dell'ultima ricerca, /<cr>, che equivale a n.

Negli esempi specifici, //<cr> corrisponde a /<cr> e significa ripetere l'ultima ricerca e applicare nessun offset.

D'altra parte, //e<cr> significa ripetere l'ultima ricerca e spostare il cursore alla fine dell'elemento trovato. Gli offset sono:

[num]   [num] lines downwards, in column 1 
+[num]  [num] lines downwards, in column 1 
-[num]  [num] lines upwards, in column 1 
e[+num]  [num] characters to the right of the end of the match 
e[-num]  [num] characters to the left of the end of the match 
s[+num]  [num] characters to the right of the start of the match 
s[-num]  [num] characters to the left of the start of the match 
b[+num]  [num] identical to s[+num] above (mnemonic: begin) 
b[-num]  [num] identical to s[-num] above (mnemonic: begin) 
;{pattern} perform another search, see |//;| 

A più o meno senza un num utilizza 1.

+0

Risposta perfetta e solida! Grazie! – Chetan

4

//<CR> significa ripetere la ricerca dell'ultimo motivo senza offset.

//e<CR> significa ripetere la ricerca dell'ultimo modello, ma atterrare alla fine della partita.

n è lo stesso /<CR> in quanto utilizza l'ultimo modello e l'ultimo offset, tuttavia n mantiene l'ultima direzione mentre / trova sempre il prossima partita.

Vedere :h last-pattern e :h search-offset per una spiegazione approfondita di questi comandi e delle relative opzioni.

+0

Quindi, '//' inizia la ricerca dalla parte superiore del file, quindi? – paxdiablo

+0

No, cerca in avanti da dove ti trovi. –

+2

L'offset è (generalmente) il punto in cui ci si trova nel file, a partire dall'alto. '//' ripeterà la ricerca da dove vi trovate, mentre 'n' ripeterà la ricerca da dove era l'ultima partita. A proposito, è possibile usare '//' anche nei comandi sostitutivi e globali. Utile se hai un po 'complicato di abbinamento da fare e vuoi provarlo prima con una ricerca regolare. – Alligator

9

Una delle belle funzionalità di // è che è possibile utilizzarlo con il comando s. Quindi, se inizialmente cerchi /Foo e poi decidi di sostituirlo con Bar, puoi farlo senza ripetere il pattern. Basta fare :%s//Bar/g

Ovviamente questo è molto più utile se il modello è un po 'più complesso.