:vim — corso in 10 lezioni
Lezione 10 di 10

Lavorare su un progetto vero

Le prime nove lezioni riguardano il file davanti a te. Questa riguarda tutto il resto: segnaposti, quickfix, confronti, sessioni. E si chiude con l'unica cosa che serve per continuare da soli — sapere leggere :help.

Teoria

Segnaposti e liste di salti

Un mark è un segnalibro invisibile su una posizione. Si mette con m seguito da una lettera e si raggiunge con l'apice.

ComandoEffetto
mamette il mark a qui
'ava all'inizio della riga del mark a
`ava alla posizione esatta, colonna compresa
mAmark maiuscolo: vale tra file diversi e sopravvive alla chiusura
:markselenca tutti i segnaposti
d'acancella da qui alla riga del mark — i mark sono movimenti

Alcuni si impostano da soli e sono i più utili di tutti:

Mark automaticoDove porta
``dov'eri prima dell'ultimo salto — premuto due volte fa avanti e indietro
`.al punto dell'ultima modifica
`^dove hai smesso di scrivere l'ultima volta (come gi)
`[   `]inizio e fine dell'ultimo testo modificato o incollato
`" dov'eri quando hai chiuso il file l'ultima volta
ListaNavigazione
jumplistCtrl-o indietro · Ctrl-i avanti · :jumps per vederla
changelistg; alla modifica precedente · g, alla successiva
g; è sottovalutato. Hai corretto qualcosa in cima al file, sei sceso a controllare un'altra cosa, e ora vuoi tornare a dove stavi lavorando: g; ci arriva senza aver messo nessun segnaposto.
Pratica

Quickfix: la lista dei risultati

La quickfix list è un elenco di posizioni — file, riga, colonna — che Vim può percorrere una a una. La riempiono i compilatori, i linter e, soprattutto, le ricerche.

ComandoEffetto
:vimgrep /pattern/ **/*.phpcerca con il motore di regex di Vim e riempie la lista
:grep -r pattern .usa il grep di sistema: molto più veloce sui progetti grandi
:copen   :ccloseapre / chiude la finestra dei risultati
:cn   :cprisultato successivo / precedente
:cfirst   :clastprimo / ultimo
:cdo comandoesegue il comando su ogni risultato
:cfdo comandolo esegue una volta per ogni file coinvolto
nel .vimrc: usare ripgrep al posto di grep, se ce l'hai
if executable('rg')
  set grepprg=rg\ --vimgrep\ --smart-case
  set grepformat=%f:%l:%c:%m
endif

Confrontare due file

diff dentro vim
$ vimdiff vecchio.conf nuovo.conf
$ vim -d vecchio.conf nuovo.conf     # identico, più corto
ComandoEffetto in modalità diff
]c   [cdifferenza successiva / precedente
dodiff obtain: prendi la versione dell'altro file
dpdiff put: manda la tua all'altro file
:diffupdatericalcola dopo le modifiche
:windo diffthisattiva il confronto tra due finestre già aperte

Sessioni: riprendere dove avevi lasciato

salvare e ricaricare un ambiente di lavoro
:mksession! ~/.vim/sessioni/progetto.vim   # buffer, finestre, schede, cartella

$ vim -S ~/.vim/sessioni/progetto.vim      # e ritrovi tutto com'era
Trucco

Cerca in tutto il progetto, sostituisci in tutto il progetto

È il pezzo che chiude il cerchio con il corso su grep: trovare un termine in tutti i file e rinominarlo ovunque, senza uscire da Vim e con l'annullamento sempre a disposizione.

refactoring in quattro comandi
:grep -r "vecchioNome" src/       # 1. riempi la quickfix list
:copen                            # 2. guarda i risultati: sono tutti da cambiare?
:cfdo %s/vecchioNome/nuovoNome/gc # 3. sostituisci, un file alla volta, con conferma
:cfdo update                      # 4. salva solo i file davvero modificati

Perché :cfdo e non :cdo: il primo entra una volta sola per file, e siccome %s lavora già su tutto il file, evita di ripetere la sostituzione tante volte quante sono le occorrenze. E update al posto di w scrive solo dove qualcosa è cambiato davvero, lasciando intatte le date degli altri file.

Serve set hidden (lezione 9), altrimenti Vim si ferma al primo buffer modificato dicendo che non può abbandonarlo. E prima di lanciare tutto: git status pulito, così se sbagli il pattern git checkout . ti riporta indietro in un secondo.

Come si continua da qui

Questo corso ha toccato forse il quindici per cento di Vim, che è la parte che si usa ogni giorno. Il resto non va studiato: va cercato quando serve, e sta tutto dentro il programma.

ComandoCosa apre
:helpla pagina iniziale, con l'indice generale
:help usr_tocil manuale utente: trenta capitoli in ordine di difficoltà
:help quickrefuna scheda riassuntiva di tutti i comandi
:help ciwl'aiuto di un comando NORMAL specifico
:help i_CTRL-Rprefisso i_ per i comandi del modo INSERT
:help :gprefisso : per i comandi ex
:help 'hidden'gli apici per le opzioni
:helpgrep parolacerca in tutta la documentazione e riempie la quickfix list

Dentro l'aiuto, Ctrl-] segue il collegamento sotto il cursore e Ctrl-o torna indietro. È il modo in cui questa documentazione va letta: saltando, non dall'inizio.

NORMAL fine del corso — ora tocca alle dita 10/10  Bot

Un ultimo consiglio, il più importante: non provare ad applicare tutto insieme. Scegli una cosa per settimana — questa settimana solo gli oggetti di testo, la prossima solo il punto, poi le macro — e usala anche quando sarebbe più veloce fare a mano. La velocità in Vim non viene dal sapere i comandi, ma dal non doverci più pensare.