2008-09-16 11 views
104

Con el fin de saber cuántas veces existe un patrón en el búfer en uso, lo que hago:ocurrencias de conteo en Vim sin marcar el buffer cambiaron

:%s/pattern-here/pattern-here/g 

Se da el número de ocurrencias del patrón, pero evidentemente es engorroso y también tiene el efecto secundario de establecer el estado "cambiado".

¿Hay una forma más elegante de contar?

Respuesta

156

Para evitar la sustitución, abandonan el segundo patrón vacío, y añadir los “n” bandera:

:%s/pattern-here//gn 

Esto se describe como an official tip.

+8

aún más engorroso, pero al menos ahora es oficial que no hay manera elegante ... –

+50

Si ya ha realizado una búsqueda usando /, se convierte simplemente:% s /// gn –

+0

Así que solo agrégalo a tu .vimrc – JESii

5
:!cat %| grep -c "pattern" 

No es exactamente el comando vim, pero le dará lo que necesita de vim.
Puede asignarlo al comando si necesita usarlo con frecuencia.

+6

Más simplemente':! Grep -c "patrón"% ' – Iazel

2

El vimscript IndexedSearch mejora los comandos de búsqueda de Vim para mostrar "En el partido #N de M coincidencias".

-1

vimgrep es tu amigo aquí:

vimgrep pattern % 

Shows:

(1 of 37) 
+7

Esto no cuenta las ocurrencias , pero cuenta líneas que contienen el patrón. Entonces, si el patrón se oye dos veces en una línea, solo se contará una vez. – sotto

6
:help count-items 

En VIM 6.3, así es como lo haces.

:set report=0 
:%s/your_word/&/g # returns the count without substitution 

En VIM 7.2, así es como usted lo haría:

:%s/your_word/&/gn # returns the count, n flag avoids substitution 
+0

Tenía un archivo grande y seguir este enfoque fue mucho más rápido que grep. –

1

Coloque el cursor en la palabra que desea contar y ejecutar el siguiente.

:%s/<c-r><c-w>//gn 

Ver :h c_ctrl-r_ctrl-w

Cuestiones relacionadas