2009-04-03 14 views
87

Desidero cercare una stringa e trovare il numero di occorrenze in un file utilizzando l'editor vi.Ricerca stringa e conteggio nell'editor vi

+2

La risposta selezionata (': g/xxxx/d') è terribile, pericolosa e inferiore agli altri in questa pagina. Si prega di deselezionarlo. –

+0

sono d'accordo e ti dice solo 'linee cancellate' non 'occorrenze cancellate' – user1709076

risposta

15
:g/xxxx/d 

Questo eliminerà tutte le linee con motivo e segnalerà quante cancellazioni. Annulla per riprenderli dopo.

+4

Ovviamente, lui può semplicemente omettere la "d" in modo che non debba per l'operazione – Rook

+13

Nota questo solo ti dice quante linee - non quante occorrenze.Penso che dirk's sia una soluzione migliore –

+4

La mia soluzione qui sotto conta correttamente più occorrenze all'interno una riga e non c'è nulla da annullare –

37

:% s/stringa/stringa/g darà la risposta.

+0

Quale risposta migliore. +5 se possibile – ojblass

+0

Immagino che funzionerebbe solo quando nel pattern non è usato nessun '. *' –

+9

Non c'è bisogno di ripetere la stringa, basta fare '% s/string // ng'. – slm

119

È necessario il flag n. Per contare parole Usa:

:%s/\i\+/&/gn 

e una particolare parola:

:%s/the/&/gn   

Vedi count-items sezione relativa alla documentazione.

Se è sufficiente digitare:

%s/pattern/pattern/g 

poi la riga di stato vi darà il numero di partite in VI pure.

+0

Sembra che questa risposta sia per gli utenti Vim e non per Vi :( – kadeshpa

+0

Hai solo vi sul tuo sistema? Quale versione? – dirkgently

+0

Qualcuno ha taggato il tuo quesiton con vim in esso ... L'ho rimosso – ojblass

137

IL modo è

:% s/modello // gn

+6

+1 per l digitando e al punto. – Leafy

+0

Questa è la risposta più autentica con nessun trucco over-kill usato. – user1412066

2

uso

:% s/modello/\ 0/g

quando stringa reticolo è troppo lungo e non ti piace digitare di nuovo tutto

17

(simile a Gustavo detto, ma in aggiunta:)

Per qualsiasi precedenza di ricerca, si può fare semplicemente:

:%s///gn 

Un modello non è necessario, perché è già nella ricerca -register (@/).

"%" - fare s/ in tutto il file
"g" - ricerca globale (con più colpi in una sola riga)
"n" - impedisce l'eventuale sostituzione del s/ - nulla è cancellato! niente deve essere annullato!
(si veda: :help s_flag per maggiori informazioni)

(In questo modo, funziona perfettamente con "Ricerca per il testo selezionato visivamente", come descritto nel vim-wikia tip171)

0

Io suggerisco di fare:

  1. Effettuare una ricerca con * per eseguire una "ricerca limitata" per ciò che si trova sotto il cursore o effettuare una ricerca standard /pattern.
  2. Utilizzare :%s///gn per ottenere il numero di occorrenze.Oppure puoi usare :%s///n per ottenere il numero di linee con occorrenze.

** ho davvero con ho potuto trovare un plug-in che potrebbero dare la messaggistica di "partita N di N su N linee" con ogni ricerca, ma ahimè.

Nota: Non essere confuso dalla formulazione complessa dell'output. Il comando precedente potrebbe darti qualcosa come 4 matches on 3 lines dove quest'ultimo potrebbe darti 3 matches on 3 lines. Mentre tecnicamente accurato, quest'ultimo è fuorviante e dovrebbe dire "3 linee corrispondono". Quindi, come puoi vedere, non c'è mai veramente bisogno di usare la seconda forma (solo "n"). Ottieni le stesse informazioni, più chiaramente e altro usando il modulo 'gn'.