Ci sono due modi in cui questo può essere realizzato, il modo puro vimscript e il wcmodo.
La via pura
È possibile utilizzare il comando cerca e sostituisci per fare ciò. Per esempio:
:%s/\<\w\{-}\>//gn
Ciò che fa invece di sostituire un determinato modello con qualcosa, conta solo le occorrenze del modello. Questo è a causa della nbandiera. Per contare le parole in una sezione specifica (in questo caso le righe da 5 a 15), potresti fare qualcosa del genere:
:5,15s/\<\w\{-}\>//gn
Ciò elimina la necessità di trascinare il contenuto di una selezione in un registro. Per vedere più possibilità per ciò che può essere messo al posto di 5-15, leggere l'argomento della guida per cmdline-ranges. Se vuoi farlo spesso, probabilmente è bene creare una mappatura (o comando) per questo. Inoltre, se hai hlsearchabilitato, potresti voler correre in :nohlsearchseguito per cancellare l'evidenziazione.
La wcstrada
La stessa cosa può essere realizzata con wc. Allo stesso modo è possibile utilizzare cmdline-rangesper selezionare l'area con il :scomando, è possibile utilizzarli con comandi esterni. Per esempio:
:5,15!wc -w
Ciò esegue le righe da 5 a 15 tramite il wccomando. L'aspetto negativo di questo è che sostituisce quell'intervallo di righe con l'output del comando. È possibile annullare questa modifica premendo u. Si noti inoltre che la soluzione vimscript potrebbe non funzionare con lingue diverse, poiché \wnon corrisponde a quelli che normalmente sarebbero caratteri di parole in altre lingue. wcpotrebbe fare di meglio \w. Inoltre, ecco un comando elaborato per rendere più veloce l'operazione:
command -range=% -addr=lines WordCount execute '<count>!wc -w' | .y a | undo | echo @a
Si noti che questo blocca il aregistro.
Nota
Sembra che ciò possa essere realizzato anche in modalità visiva con la g<C-g>combinazione di tasti. Vedi la risposta di Carpetsmoker per una spiegazione di questo.