Il y a deux façons d'accomplir cela, la voie pure vimscript et la wc
voie.
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 n
drapeau. 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 hlsearch
activé, vous voudrez peut-être exécuter :nohlsearch
ensuite pour effacer la surbrillance.
Le wc
chemin
La même chose peut être accomplie avec wc
. De la même manière que vous pouvez utiliser cmdline-ranges
pour sélectionner la zone avec la :s
commande, vous pouvez les utiliser avec des commandes externes. Par exemple:
:5,15!wc -w
Cela exécute les lignes 5 à 15 via la wc
commande. 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 \w
elle ne correspond pas à ce qui serait normalement des caractères de mot dans d'autres langues. wc
peut 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 a
registre.
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.