Crash Course on Vi: Editing

📖 5 min di lettura · 1.069 parole

Logo Vi stile tastieraIn questa parte del corso introduciamo alcuni comandi utili per poter moficare qualsiasi file di testo con il nostro editor preferito (bisognerà fare un sondaggio) Vi. In virtù di quanto detto nel precedente articolo, dovremmo avere a disposizione un file contenente la bibbia; usiamolo per cercare di ritrovarci. Vi ricordo come scaricarlo

  curl http://www.gutenberg.org/cache/epub/999/pg999.txt > pg999.txt  vi pg999.txt 

oppure

 wget http://www.gutenberg.org/cache/epub/999/pg999.txt  vi pg999.txt 

Supponendo di avere un terminale grande 80×30 caratteri (e di trovarci in modalità command), posizioniamoci all’interno del file nel punto in cui inizia il Canto I, ovvero a riga 328 che per noi corrisponde alla pagina 12; per fare questo abbiamo come sempre più possibilità:

  • scorrere le pagine con il comando Ctrl+F per circa 12 volte, oppure utilizziamo una bellissima caratteristica di Vim che permette di ripetere i comandi un determinato numero di volte, basta anteporre al comando il numero desiderato. Dunque nel nostro caso digitiamo 1 2 Ctrl+F , il gioco è fatto.
  • chi non avesse la stessa dimensione del terminale potrebbe voler saltare direttamente alla riga desiderata…ok…lo potevo dir prima, ma va bene lo stesso! Basta digitare “:” seguiti dal numero di riga, quindi nel nostro caso : 3 2 8 Enter

A questo punto poniamoci 2 righe sotto la riga appena detta (dovrebbe essere vuota) ed inseriamo del testo, per farlo basterà entrare in modalità inserimento digitanto il carattere I , noi abbiamo inserito “revisionata da Realm”!

Dunque digitando del testo in modalità inserimento questo verrà inserito nel file nel punto in cui si trova il cursore, tuttavia se volessimo sostituire del testo anzichè inseriro, trovandosi in modalità command, dovremmo digitare Shift+R per entreare in modalità replace. Facciamo una prova, posizionatevi a riga 342 all’inizio della parola penetra, entrate in modalità replace e digitate “entra”, vedrete che mentre digitate il testo sottostante al cursore verrà sostituito, la sequenza intera è data da : 3 4 2 Enter 2 W Shift+R e digitiamo “entra” e torniamo in modalità command Esc .

Noterete sicuramente che la parola che abbiamo modificato era più lunga di quella inserita, quindi sono presenti altri due caratteri da cancellare, per farlo utilizziamo il tasto X da utilizzare posizionando il cursore sul carattere da cancellare. Utilizzando la possibilità di ripetere i comandi avremmo potuto specificare subito il numero di caratteri da cancellare aneponendone il numero, quindi 2 X . E’ possibile poi cancellare non il carattere sottostante al cursore, ma quello precedente (a sinistra) digitando Shift+X .Vogliamo ricapitolare tutto in una unica sequenza?! Ecco: : 3 4 2 Enter 2 W Shift+R E N T R A Esc E 2 Shift+X …Bello no?…Anche un po’ folle!.

Ora sappiamo come inserire e cancellare caratteri , ma mettiamo il caso che abbiamo sbagliato qualcosa e ci accorgiamo di voler tornare indietro? Niente di più facile basta premere il tasto U che assolve alla funzione di “Undo”. Utilizziamola subito e ritorniamo al nostro file originale annullando gli ultimi cambiamenti; ma se invece abbiamo sbagliato e siamo andati troppo indietro con le modifiche? Rimediamo utilizzando l’opposto della funzione “Undo”con il comando Ctrl+R , mi raccomando attenti a non confonderti con il Replace.

Per seguirci meglio, vi potrebbe essere utile visualizzare i numeri di riga, per farlo digitate il comando “:set number” e vedrete ciascuna riga del file preceduta dal numero di riga.

Dicevamo, se ora abbiamo necessità di cancellare una intera riga di testo, basterà digitare D D (la ripetizione non è un errore). Mentre per inserire una nuova riga digitiamo la lettera O Ma noi vogliamo cancellare molte altre cose e non in maniera così banale, vogliamo cancellare tutte quante le righe che contengono la parola “Canto”.

Prima vi illustro come poter effettuare una ricerca: digitate il carattere /   ( raccomando, non quello del tastierino numerico, ma quello al di sopra del numero 7 nella tastiera italiana (Shift+7 ) seguito dal testo che volete cercare e premete invio quindi nel nostro caso / “Canto” Enter e Vim cercherà la prossima occorrenza del termine. Per poter visualizzare le successive occorrenze del termine premiamo il tasto N . Una precisazione è da fare, la ricerca è case-sensitive quindi “canto” è diverso da “Canto”.

Ora che sappiamo come effettuare la ricerca, vediamo come riuscire ad ottenere quanto vogliamo realizzare ovvero cancellare le prime 10 righe che contengono la parola “Canto”. Introduciamo le macro, che consentono di registrare sequenze di azioni per poterle riutilizzare in seguito. La sintassi è semplice infatti  la registrazione inizia premendo il tasto Q seguito da una lettera che ci permetterà di identificare la macro registrata, ovvero digitando Q A la macro verra registrata nel registro “A”. Iniziata la registrazione, possiamo effettuare qualsiasi azione, quindi per interromperla basterà ridigitare il tasto Q .

Utilizziamo questo strumento per i nostri propositi, registriamo una macro che si posiziona sulla prossima occorrenza della stringa cercata e cancelliamola, quindi i tasti che digiteremo nella macro saranno N D D . L’intera sequenza per registrare la macro necessaria è la seguente Q A N D D Q . Bene ora la macro è registrata!

Finiamo il nostro piano diabolico:

  1. Cerchiamo la stringa “Canto”  digitando / “Canto”;
  2. Posizioniamoci all’inizio del file gg
  3. Eseguiamo la macro per 10 volte con il comando 1 0 @ A .

L’ultimo comando esegue la macro per dieci volte, infatti il comando di esecuzione è @ seguito dalla lettera che identifica la macro, nel nostro caso “A”. Al solito anteponendo un numero al comando questo verrà ripetuto per quante volte abbiamo specificato.

Il gioco è fatto, abbiamo illustrato un po’ di comandi basilari per l’editing e qualche altro comando non troppo avanzato ma molto molto utile. Visto che è inerente questo articolo specifichiamo che è possibile entrare in modalità inserimento anche premento il tasto A e la differenza con I sta nel fatto che il primo inizia l’inserimento nel carattere successivo alla posizione del cursore. Ancora se su di una riga premte la combinazione Shift+A inizierete l’inserimento alla fine della riga corrente.

Piccolo ripasso:

  • Entra in modalità inserimento I
  • Entra in modalità inserimento partendo dalla posizione successiva al cursore A
  • Entra in modalità inserimento partendo dalla fine della riga Shift+A
  • Entra in modalità sostituzione Shift+R
  • Cancellazione di un carattere X
  • Cancellazione del carattere precedente al cursore Shift+X
  • Annulla l’ultima operazione effettuata (Undo) U
  • Annulla l’ultimo annullamento (Redo) Ctrl+R
  • Inserimento nuova riga O
  • Cancellazione riga D D
  • Ricerca di testo / seguito dal testo e infine Enter
  • Successiva occorrenza del testo cercato N
  • Registrazione macro Q A ; operazioni da registrare; Q
  • Utilizzo macro @ A

Fatemi sapere se vi può interessare ancora qualche altro comando!

Torna in alto