Muestra el conteo de partidos en Vim

Hay una buena función en Google Chrome cuando haces una búsqueda. Te dice el número de coincidencias que hay para la palabra clave que estás buscando. Sin embargo, en Vim no veo esa característica. Algunas personas sugirieron usar %s/pattern//gn o similar:

http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
No se puede contar el número de coincidencias en Vim

¡Pero eso es bastante largo realmente! Estoy buscando el conteo cuando presiono ‘*’, ‘%’, o hago cualquier búsqueda usando ‘/’ y ‘?’.

¿Alguna idea?

Búsqueda de índice de complementos

La más nueva versión aquí .

No sé de una manera directa de hacerlo, pero podría hacer uso de la forma :%s/// utiliza la última búsqueda como el patrón predeterminado:

 :nmap ,c :%s///gn 

Debería poder hacer una búsqueda y luego presionar ,c para informar el número de coincidencias.

El único problema será que * y # ignoren 'smartcase' , por lo que los resultados podrían desaparecer unos pocos después de usar * . Puede solucionar esto haciendo * seguido de / Arriba ENTER y luego ,c .

Una adición a la respuesta de @Al: si desea que vim lo muestre automáticamente en la línea de estado, intente agregar lo siguiente a la vimrc:

 let s:prevcountcache=[[], 0] function! ShowCount() let key=[@/, b:changedtick] if s:prevcountcache[0]==#key return s:prevcountcache[1] endif let s:prevcountcache[0]=key let s:prevcountcache[1]=0 let pos=getpos('.') try redir => subscount silent %s///gne redir END let result=matchstr(subscount, '\d\+') let s:prevcountcache[1]=result return result finally call setpos('.', pos) endtry endfunction set ruler let &statusline='%{ShowCount()} %<%f %h%m%r%=%-14.(%l,%c%V%) %P' 

Aquí hay una solución barata … Usé Buscar y reemplazar todo en Vim. Sin guiones sofisticados. Hice una búsqueda X y reemplazo todo con X. Al final, Vim informa “2134 sustituciones en 9892 líneas”. X apareció 2134 veces. Uso: q! para salir del archivo sin guardarlo. Ningún daño hecho.

Ya tiene una buena cantidad de respuestas, pero me parece que todavía hay un enfoque más para este problema.

Esto es realmente algo con lo que tuve que lidiar hace unos días. Agregué una función y un mapeo de tal manera que tocas la asignación cuando el cursor está debajo de la palabra que deseas contar y devuelve el número de coincidencias.

La función:

 " Count number of occurances of a word function Count(word) let count_word = "%s/" . a:word . "//gn" execute count_word endfunction 

Y el mapeo:

 " Count current word nmap w :call Count(expand("")) 

Alternativamente, desde lo que @Al sugiere, puede mapear la combinación de teclas para escribir la mayor parte de la línea y luego mover el cursor a la posición donde se inserta el patrón real:

: nmap, c ^ [:% s /// gn ^ [OD ^ [OD ^ [OD ^ [OD

Donde ‘^ [‘ es Ctrl + V, Esc y ‘^ [OD’ es Ctrl + V, izquierda

Luego presionar ‘, c’ pasará al modo comando, ingrese el patrón y deje el cursor sobre el segundo ‘/’, listo para insertar el patrón.

 :vim[grep][!] /{pattern}/[g][j] {file} ... 

Vimgrep usa el motor de búsqueda de expresiones regulares integrado de Vim, por lo que puede reutilizar los patrones del comando de búsqueda estándar de Vim. Entonces, primero pruebo el patrón de búsqueda de la manera normal usando: / {patrón} /

Luego ingrese lo siguiente:

 :vim /CTRL+r//g % 

donde CTRL+r/ insertará el último patrón de búsqueda después de la primera barra inclinada. La línea de estado se mostrará (1 de máximo), donde max es el número máximo de coincidencias para {pattern} . Luego use el :cnext y :cprev para buscar las coincidencias siguientes y anteriores y :cfirst y :clast para la primera y la última coincidencia. Estos 4 comandos se pueden reasignar para hacerlos más rápidos de ejecutar.

Este plugin hace justamente eso. https://github.com/osyo-manga/vim-anzu

Al buscar una palabra en vim, mostrará el conteo de palabras en la línea de estado. También tiene la opción de mostrar junto a la palabra buscada, es decir. this_is_my_sample_word (3/12) , o this_is_my_sample_word (7/12) . Esto básicamente dice: esta es la tercera o séptima ocurrencia de un total de 12 ocurrencias.