Contando ocorrências no Vim sem marcar o buffer alterado


111

Para saber quantas vezes um padrão existe no buffer atual, eu faço:

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

Ele fornece o número de ocorrências do padrão, mas é obviamente complicado e também tem o efeito colateral de definir o status 'alterado'.

Existe uma maneira mais elegante de contar?

Respostas:


166

Para evitar a substituição, deixe o segundo padrão vazio e adicione o sinalizador “n”:

:%s/pattern-here//gn

Isso é descrito como uma dica oficial .


8
ainda mais complicado, mas pelo menos agora é oficial que não há maneira elegante ...
Paul Oyster

53
Se você já realizou uma pesquisa usando /, ela se torna apenas:% s /// gn
Peter Gibson

Então, basta adicioná-lo ao seu .vimrc
JESii

3
Achei o seguinte mapeamento bastante útil: nnoremap <leader>n :%s///gn <CR>para contar ocorrências da última pesquisa
Ikar Pohorský

1
Não há como fazer essa contagem entrar em uma variável, certo? Isso é o que eu preciso ...
Steven Lu

8
:help count-items

No VIM 6.3, é assim que você faz isso.

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

No VIM 7.2, você faria isso da seguinte maneira:

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

Eu tinha um arquivo grande e seguir essa abordagem foi muito mais rápido do que o grep.
Jai Prakash

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

Não é exatamente o comando vim, mas lhe dará o que você precisa do vim.
Você pode mapeá-lo para o comando se precisar usá-lo com frequência.


7
Mais simplesmente:!grep -c "pattern" %
Iazel

2

O vimscript IndexedSearch aprimora os comandos de pesquisa do Vim para exibir "Na correspondência #N de M correspondências".


1

Coloque o cursor na palavra que deseja contar e execute o seguinte.

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

Vejo :h c_ctrl-r_ctrl-w


-1

vimgrep é seu amigo aqui:

vimgrep pattern %

Programas:

(1 of 37)

7
Isso não conta ocorrências, mas conta linhas que contêm o padrão. Portanto, se o padrão ocorrer duas vezes em uma linha, ele será contado apenas uma vez.
sotto de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.