Il y a deux façons d'accomplir cela, la voie pure vimscript et la wcvoie.
La pure voie Vim
Pour ce faire, vous pouvez utiliser la commande Rechercher et remplacer. Par exemple:
:%s/\<\w\{-}\>//gn
Au lieu de remplacer un motif donné par quelque chose, cela compte simplement les occurrences du motif. C'est à cause du ndrapeau. Pour compter les mots dans une section spécifique (dans ce cas, les lignes 5 à 15), vous pouvez faire quelque chose comme ceci:
:5,15s/\<\w\{-}\>//gn
Cela supprime la nécessité de copier le contenu d'une sélection dans un registre. Pour voir plus de possibilités pour ce qui peut être mis en place 5-15, lisez la rubrique d'aide pour cmdline-ranges. Si vous voulez le faire souvent, il est probablement bon de créer un mappage (ou une commande) pour cela. De plus, si vous l'avez hlsearchactivé, vous voudrez peut-être exécuter :nohlsearchensuite pour effacer la surbrillance.
Le wcchemin
La même chose peut être accomplie avec wc. De la même manière que vous pouvez utiliser cmdline-rangespour sélectionner la zone avec la :scommande, vous pouvez les utiliser avec des commandes externes. Par exemple:
:5,15!wc -w
Cela exécute les lignes 5 à 15 via la wccommande. L'inconvénient est qu'il remplace cette plage de lignes par la sortie de la commande. Vous pouvez annuler cette modification en appuyant sur u. Notez également que la solution vimscript peut ne pas fonctionner avec différentes langues, car \welle ne correspond pas à ce qui serait normalement des caractères de mot dans d'autres langues. wcpeut faire mieux que cela \w. En outre, voici une commande sophistiquée pour le faire plus rapidement:
command -range=% -addr=lines WordCount execute '<count>!wc -w' | .y a | undo | echo @a
Notez que cela encombre le aregistre.
Remarque
Il semble que cela puisse également être accompli en mode visuel avec la g<C-g>combinaison de touches. Voir la réponse de Carpetsmoker pour une explication à ce sujet.