Contando ocurrencias en Vim sin marcar el búfer cambiado


111

Para saber cuántas veces existe un patrón en el búfer actual, hago:

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

Da el número de apariciones del patrón, pero obviamente es engorroso y también tiene el efecto secundario de establecer el estado "cambiado".

¿Existe una forma más elegante de contar?

Respuestas:


166

Para evitar la sustitución, deje el segundo patrón vacío y agregue la bandera "n":

:%s/pattern-here//gn

Esto se describe como un consejo oficial .


8
aún más engorroso, pero al menos ahora es oficial que no hay forma elegante ...
Paul Oyster

53
Si ya ha realizado una búsqueda con /, se convierte en solo:% s /// gn
Peter Gibson

Así que agréguelo a su .vimrc
JESii

3
Encontré bastante útil el siguiente mapeo: nnoremap <leader>n :%s///gn <CR>para contar las ocurrencias de la última búsqueda
Ikar Pohorský

1
No hay forma de hacer que este recuento entre en una variable, ¿verdad? Eso es lo que necesito ...
Steven Lu

8
:help count-items

En VIM 6.3, así es como se hace.

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

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

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

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

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.


7
Más simplemente:!grep -c "pattern" %
Iazel


1

Coloque el cursor sobre la palabra que desea contar y ejecute lo siguiente.

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

Ver :h c_ctrl-r_ctrl-w


-1

vimgrep es tu amigo aquí:

vimgrep pattern %

Muestra:

(1 of 37)

7
Esto no cuenta las ocurrencias, pero cuenta las líneas que contienen el patrón. Entonces, si el patrón aparece dos veces en una línea, solo se contará una vez.
sotto
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.