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.