Há duas maneiras de se conseguir isso: a maneira pura de vimscript e a wcmaneira.
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 nbandeira. 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 hlsearchativado, poderá executar :nohlsearchposteriormente para limpar o realce.
O wccaminho
A mesma coisa pode ser realizada com wc. Da mesma maneira que você pode usar cmdline-rangespara selecionar a área com o :scomando, você pode usá-los com comandos externos. Por exemplo:
:5,15!wc -w
Isso executa as linhas 5 a 15 através do wccomando 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 \wnão corresponde ao que normalmente seriam caracteres de palavra em outros idiomas. wcpode 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 aregistro.
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.