Come eliminare righe basandoci sul primo carattere in VIM

Wed 22 September 2021

Ti è mai capitato di dover cancellare alcune righe di un file basandoti sul primo carattere presente sulla linea? Molte volte tale operazione richiede un'attività manuale molto onerosa in termini sia di tempo impiegato sia di frustrazione per la ripetitività dell'operazione. Ad esempio, supponiamo di essere in fase di fattorizzazione del codice, ci accorgiamo di aver commentato troppe righe di codice in un file e di volerle cancellare tutte. Vogliamo ad esempio cancellare tutte le righe di codice commentate in Python (primo carattere di linea #) oppure in Java (primo carattere di linea //).

Come possiamo fare?

Andando ad indagare all'interno dei vari editor testuali grafici, sicuramente troveremo qualcosa che fa al caso nostro, ma la ricerca potrebbe essere lunga e laboriosa.

In questo articolo, ti mostro come rimuovere tali linee, basandoti sul primo carattere, utilizzando vi/Vim/gVim. Questa soluzione funziona sempre e con tutti i file testuali pertanto una volta imparata ed acquisita possiamo riutilizzarla tutte le volte che vogliamo.

Cancellare righe

Per prima cosa, ti mostro come rimuovere tutte le righe che cominciano con un carattere non speciale. Supponiamo di voler rimuovere tutte le righe che cominciano con la lettera B maiuscola; per rimuovere tali linee eseguiamo il seguente comando su VIM dal command mode.

:g/^B/d 

Eseguito il comando ci accorgeremo che tutte le righe con il carattere B ad inizio linea saranno state cancellate. VIM infatti non cancella il contenuto mantenendo una linea vuota, ma cancella fisicamente la riga.

Cancellare righe con primo carattere speciale

Abbiamo visto quale comando eseguire per rimuovere le linee basandoci sul primo carattere. Tuttavia è importante affrontare una casistica per la quale il precedente comando potrebbe non funzionare a causa della particolarità del primo carattere ricercato.

Quando ci troviamo a lavorare con caratteri speciali, quali ad esempio caratteri utilizzati dal VIM nella propria sintassi (come il $), dobbiamo modificare il comando precedentemente descritto inserendo l'escape.

Supponiamo quindi di voler rimuovere le linee che hanno come primo carattere, il carattere speciale $. Dal command mode di VIM, eseguiamo il comando:

:g/^\$/d

In questo caso nota che il carattere speciale $ è preceduto dal carattere di escape \.

Il carattere di escape serve a comunicare al VIM di trattare il carattere successivo come carattere e non come costrutto sintattico.

Cancellare righe bianche

La cancellazione delle righe bianche rappresenta un caso particolare gestibile da VIM. Dal command mode, per cancellare le righe bianche eseguiamo il seguente comando:

:g/^$/d