A proposito di Vim e del Comando Globale
Indice dei Contenuti
Vim e il comando globale: struttura di base
Questo articolo non è una completa disamina del Comando Globale in Vim ma è solo una serie di osservazioni personali sullo stesso.
Potete trovare una buona rassegna, scritta da chi ne sa molto più di me, in questa pagina.
Con il “Comando globale” di Vim (g
) è possibile replicare vari
ex-comandi su più righe.
La struttura di base del comando globale è molto semplice:
:g/pattern/command
, ovvero:
:
attiva la “modalità di comando”.g
attiva il “comando globale”./pattern/
è la “zona di ricerca” per la corrispondenza dei modelli nel documento./command/
è il comando applicato alle intere righe in cui si trovano i risultati.
La struttura di base è quindi bifasica: una fase di ricerca iniziale e una fase di comando.
Per dimostrare come funziona questa struttura, ipotizziamo l’esistenza delle seguenti righe:
abc
def
ghi
jkl
mno
Se si desidera eliminare la riga contenente la lettera “a”, è possibile
utilizzare il seguente comando :g/a/d
in cui:
:
è il tipico carattere di attivazione della modalità di comando in Vim.a
è il modello di ricerca.d
è il comando (Elimina) applicato all’intera riga in cui si trova il risultato della ricerca.È davvero semplice!
Comando Globale di Vim e intervallo di ricerca
Se invece si vuole cancellare un intervallo di righe che corrispondono a un modello iniziale e finale, è necessario utilizzare un comando globale leggermente più strutturato.
Supponiamo di dover cancellare tutte le righe tra quella contenente la lettera “a” e quella contenente la lettera “k”.
In questo caso, è necessario utilizzare una struttura trifasica: schema iniziale, schema finale e comando.
La struttura è la seguente :g/initial_pattern/,/ final_pattern/command
I modelli iniziale e finale sono separati da una virgola.
In questo caso, si usa la seguente formula
:g/a/,/k/d
in cui:
a
è il modello inizialek
è lo schema finaled
è il comando
Se invece si vuole cancellare solo l’intervallo che inizia dalla riga
dopo il primo pattern corrispondente, si deve usare l’opzione +1
al pattern iniziale:
:g/a/+1,/k/d
Allo stesso tempo, se si deve cancellare fino all’intervallo prima
del pattern di corrispondenza finale, si deve usare l’opzione -1
dopo
il pattern finale:
:g/a/,/k/-1d
Combinando i due obiettivi precedenti: se si deve cancellare
l’intervallo che inizia dalla riga dopo il modello di corrispondenza
iniziale e fino alla riga prima del modello di corrispondenza
finale, si devono usare entrambe le opzioni +1
e -1
:
:g/a/+1,/k/-1d
.
Esempi vari
Naturalmente, è possibile eseguire tutte le altre operazioni consentite dal comando globale, tra cui:
- Cancellare (come visto sopra)
- Sostituire
- Normale
- Stampa
- Spostare
- Metti
- Copia
- Ordinamento
Esempio con il comando Normale: supponiamo di dover aggiungere una riga vuota dopo la riga con la lettera “a” in qualsiasi punto del documento si trovi il cursore.
Questa è la soluzione:
:g/a/norm o
Che cos’è questa norm o
?
Quando trova l’obiettivo, la formula istruisce Vim ad applicare la
modalità normale (norm
) e a digitare virtualmente l’aggiunta di una
riga sotto con il comando standard o
di Vim, che tutti coloro che
usano Vim, ovviamente, conoscono già.
Un altro obiettivo per il quale bisogna aggiungere un punto alla fine di ogni riga.
Ecco come fare:
:g/a/norm A,
.
Il comando norm A,
aggiunge una virgola alla fine della riga.
Con la stessa logica si possono creare infinite combinazioni di comandi.
Grazie per l’attenzione.