Há duas maneiras de se conseguir isso: a maneira pura de vimscript e a wc
maneira.
A maneira pura do vim
Você pode usar o comando de pesquisa e substituição para fazer isso. Por exemplo:
:%s/\<\w\{-}\>//gn
O que isso faz é, em vez de substituir um determinado padrão por algo, apenas conta as ocorrências do padrão. Isso é por causa da n
bandeira. Para contar as palavras em uma seção específica (neste caso, linhas 5 a 15), você pode fazer algo assim:
:5,15s/\<\w\{-}\>//gn
Isso elimina a necessidade de puxar o conteúdo de uma seleção para um registro. Para ver mais possibilidades do que pode ser colocado no lugar 5-15
, leia o tópico de ajuda para cmdline-ranges
. Se você deseja fazer isso com frequência, provavelmente é bom criar um mapeamento (ou comando) para ele. Além disso, se você tiver hlsearch
ativado, poderá executar :nohlsearch
posteriormente para limpar o realce.
O wc
caminho
A mesma coisa pode ser realizada com wc
. Da mesma maneira que você pode usar cmdline-ranges
para selecionar a área com o :s
comando, você pode usá-los com comandos externos. Por exemplo:
:5,15!wc -w
Isso executa as linhas 5 a 15 através do wc
comando A desvantagem disso é que ele substitui esse intervalo de linhas pela saída do comando. Você pode desfazer essa alteração pressionando u
. Observe também que a solução vimscript pode não funcionar com idiomas diferentes, porque \w
não corresponde ao que normalmente seriam caracteres de palavra em outros idiomas. wc
pode fazer melhor nisso do que \w
. Além disso, aqui está um comando sofisticado para torná-lo mais rápido:
command -range=% -addr=lines WordCount execute '<count>!wc -w' | .y a | undo | echo @a
Observe que isso derruba o a
registro.
Nota
Parece que isso também pode ser realizado no modo visual com a g<C-g>
combinação de teclas. Veja a resposta de Carpetsmoker para uma explicação disso.