Ci sono due modi in cui questo può essere realizzato, il modo puro vimscript e il wc
modo.
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 n
bandiera. 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 hlsearch
abilitato, potresti voler correre in :nohlsearch
seguito per cancellare l'evidenziazione.
La wc
strada
La stessa cosa può essere realizzata con wc
. Allo stesso modo è possibile utilizzare cmdline-ranges
per selezionare l'area con il :s
comando, è possibile utilizzarli con comandi esterni. Per esempio:
:5,15!wc -w
Ciò esegue le righe da 5 a 15 tramite il wc
comando. 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é \w
non corrisponde a quelli che normalmente sarebbero caratteri di parole in altre lingue. wc
potrebbe 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 a
registro.
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.