"Trova successivo" in Vim


536

Per cercare in avanti in Vim cake, digito /cake, ma il cursore passa alla prima corrispondenza quando premo Invio. Esiste un comando Vim analogo a "trova successivo"?


33
Abituati a usare :help. :help /mostra aiuto sulla ricerca e la risposta alla tua domanda appare solo un po 'in fondo alla pagina.
Chris Morgan,

Risposte:


877

È nper il prossimo e Nper il precedente.

E se usi la ricerca inversa con ?(per esempio, ?cake) invece di /, è il contrario.

Se è installato sul tuo sistema, dovresti provare a eseguire il vimtutorcomando dal tuo terminale, che avvierà un tutorial dei comandi di base di Vim.

Rob Wells consigli su *ed #è anche molto pertinente.


1
vedi anche indice plug-in di ricerca vim.org/scripts/script.php?script_id=1682
SergioAraujo

C'è un modo per passare alla partita successiva (non nella riga corrente)?
user13107

@ user13107: n e N funzionano sull'intero buffer / file. Non sei limitato alla riga corrente.
Xavier T.

@XavierT. qualsiasi idea, come posso saltare un numero fisso di risultati nella ricerca. Voglio dire, ad esempio, saltare alla decima riga corrispondente
GP cyborg

@GPcyborg: ncome la maggior parte degli operatori vim può essere preceduto da un numero per ripetere il comando. Se digiti 10n, passerà al decimo risultato (dopo quello iniziale). Funziona anche per tutti gli operatori di movimento come 3jscendere di 3 linee.
Xavier T.

211

La scorciatoia più utile in Vim, IMHO, è la *chiave.

Posiziona il cursore su una parola e premi il *tasto per passare all'istanza successiva di quella parola.

La #chiave fa lo stesso, ma passa all'istanza precedente della parola.

È davvero un risparmio di tempo.


6
E nel caso non era ovvio, ne Nsi prende avanti e indietro tra le *partite una volta che hai premuto *. (Oppure puoi semplicemente continuare a premere *per andare avanti o #indietro, ma usare quei tasti maiuscoli è generalmente non ottimale.)
Herbert Sitz

3
@Herbert, in realtà n e N non ti portano resp "avanti" e "indietro". Come notato da @Xavier sopra, n è il prossimo e N è il precedente . Il controllo della ricerca in avanti e all'indietro viene effettuato dichiarando la ricerca con il tasto '/' e il '?' chiave o con il tasto '*' e il tasto '#'.
Rob Wells,

Non penso che * sia così utile ... la maggior parte delle volte cerco un frammento di una parola (ad esempio, una parte del nome di una funzione). Io non voglio /Func, farlo mi porti a SomeFunce poi premere '*' per passare alla successiva istanza SomeFuncquando la prossima istanza di Funcè in SomeOtherFunc.
weberc2,

Ancora peggio, con C ++ trovo che non vada dall'invocazione del metodo all'implementazione del metodo perché /\<foo\>non corrisponde"className::foo()"
puk

84

All'inizio avevo bisogno di guardare una demo .

Come cercare in Vim

  1. genere /
  2. digitare il termine di ricerca, ad esempio "var"
  3. stampa enter
  4. per la prossima istanza premere n(per precedente N )

2
La digitazione *non è corretta. Cioè un file aa aaa. Cerca /aa, devi abbinare. Alla prima corrispondenza, premendo si *cambia il termine di ricerca.
Bernhard,

1
n non è "prossimo" ma "ripeti l'ultima ricerca". Quindi inserendo? Var inizierà la ricerca verso l'alto dalla posizione corrente per "var". E 'N' è in realtà "ripeti l'ultima ricerca nella direzione opposta", quindi per questo esempio che cerca 'var' verso il basso dalla posizione corrente.
Rob Wells,



13

Come discusso, ci sono diversi modi per cercare:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

inoltre, navigando avanti / indietro con Ne n.

È inoltre possibile modificare / richiamare la cronologia delle ricerche aprendo il prompt di ricerca con /e quindi scorrere con C-p/ C-n. Ancora più utile è q/, che ti porta a una finestra in cui è possibile navigare nella cronologia delle ricerche.

Anche per considerazione è fondamentale 'hlsearch'(digitare :hlsper abilitare). Questo rende molto più facile trovare più istanze del tuo modello. Potresti anche voler rendere le tue partite ancora più luminose con qualcosa del tipo:

hi Search ctermfg=yellow ctermbg=red guifg=...

Ma poi potresti impazzire con partite gialle costanti su tutto lo schermo. Quindi ti ritrovi spesso a usare :noh. Questo è così comune che una mappatura è in ordine:

nmap <leader>z :noh<CR>

Ricordo facilmente questo come zda quando scrivevo costantemente /zz<CR>(che è un evento insolito veloce da digitare) per cancellare la mia evidenziazione. Ma la :nohmappatura è decisamente migliore.


2
Se ti senti ispirato q/, dovresti anche giocare q:. Entrambi sono davvero utili! (Non proprio in relazione con questa domanda, però.)
Micah Elliott il

Grazie, Michea. Conoscevo già "q:", anche se non lo uso così tanto. Ma 'q /' è stato del tutto mancato nella mia educazione vim, e penso che sarà molto utile.
Stabledog,

2

Se premi Ctrl+ Enterdopo aver premuto qualcosa come "/ wordforsearch", puoi trovare la parola "wordforsearch" nella riga corrente. Quindi premere nper la partita successiva; premere Nper la partita precedente.


1
"Quando eseguiamo una ricerca, Vim esegue la scansione in avanti dalla posizione corrente del cursore, fermandosi sulla prima corrispondenza che trova." Come sottolinea Vim pratico.
Bass Chuck,
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.