Contare le parole con VIM

Wed 27 October 2021

Ti è mai capitato di voler sapere da quante parole è composto un testo? Devi inviare un articolo che richiede un numero minimo di parole per poter essere accettato? Per tutti questi problemi, VIM fornisce una soluzione.

VIM consente di contare il numero di parole presenti all'interno di un file, il numero di ripetizioni di una parola all'interno del testo, e molto altro; il tutto con estrema facilità.

In questo articolo ti mostro come fare.

Contare il numero di parole

Per contare il numero di parole all'interno del buffer corrente, digitare g ed a seguire Ctrl-g

L'output del comando precedente è:

Col 1 of 0; Line 24 of 24; Word 112 of 112; Char 729 of 729; Byte 734 of 734

L'ouput oltre a fornire il numero di parole del file (112) ci restituisce anche il numero di caratteri, di linee, e di byte.

VIM consente di contare il numero di parole anche di porzioni di testo. Per contare il numero di parole contenuto all'interno di una selezione testuale, per prima cosa selezioniamo una porzione di testo (ad esempio digitando il comando V7j che evidenzia 8 righe), e successivamente digitiamo g e Ctrl-g.

L'output prodotto è il seguente:

Selected 5 of 37 Lines; 32 of 172 Words; 235 of 1101 Chars; 235 of 1107 Bytes

Contare il numero di parole interattivamente

Puoi conteggiare il numero di parole interattivamente all'interno della status line di VIM.

Per aggiungere il conteggio interattivo, inserire all'interno del proprio file .vimrc, il seguente frammento di codice:

let g:word_count=wordcount().words
function WordCount()
    if has_key(wordcount(),'visual_words')
        let g:word_count=wordcount().visual_words."/".wordcount().words
    else
        let g:word_count=wordcount().cursor_words."/".wordcount().words
    endif
    return g:word_count
endfunction

La precedente funzione conteggia il numero di parole; per attivare la funzione sulla status line, inserire le seguenti linee all'interno del .vimrc:

set statusline+=\ w:%{WordCount()},
set laststatus=2

Contare il numero di parole visualizzate in una pagina LATEX

Abbiamo visto che VIM consente di contare le parole presenti su un file di testo. Tuttavia, non sempre i file di testo contengono le parole che sono realmente stampate a video. Un caso particolare è rappresentato da tutti i linguaggi di markup, che aggiungono sintassi alle parole per formattarle; tali formattatori non saranno visibili a video poiché sono utili solo per la fase di interpretazione e compilazione del testo. Rientrano all'interno di tali file di markup: html, xml, latex.

Ti mostro come visualizzare le parole stampate da un file latex partendo dal file sorgente ricco di elementi di markup. Associamo tale conteggio al pulsante della tastiera <F3>.

Per conteggiare il numero di parole effettive, utilizzeremo detex, programma da riga di comando che si occupa proprio di questo ma solo per i file latex.

Per far apparire il conteggio alla pressione del pulsante <F3>, inserire la seguente riga nel proprio file .vimrc:

:map <F3> :w !detex \| wc -w<CR>

Contare il numero di occorrenze di una stringa

Per contare il numero di occorrenze di una stringa (che può contenere al suo interno più parole), utilizza il comando di sostituzione :s con il flag n; tale coppia comunica al VIM di contare il numero di hit senza applicare cambiamenti al file.

Il seguente esempio conta quante volte è presente nel testo la parola ciao:

:%s/ciao//gn

Il precedente comando può essere richiamato su porzioni limitate di testo utilizzando le opzioni di visualizzazione.

Per contare le parole circondate da spazi possiamo utilizzare:

:%s/[^ ]\+//gn

Referenze

La documentazione di VIM sul tema è presente all'interno dell'help 12.5.

Conclusioni

In questo articolo hai visto come contare le parole presenti su un testo utilizzando VIM. Hai visto che puoi contare sia le parole effettive che le parole che saranno stampate a video. Le funzionalità presentate sono importanti per tutti coloro necessitano di sapere da quante parole sono composti i propri articoli senza dover installare programmi specifici.