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.
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.
| Comando | Effetto |
|---|---|
| ma | mette il mark a qui |
| 'a | va all'inizio della riga del mark a |
| `a | va alla posizione esatta, colonna compresa |
| mA | mark maiuscolo: vale tra file diversi e sopravvive alla chiusura |
| :marks | elenca tutti i segnaposti |
| d'a | cancella da qui alla riga del mark — i mark sono movimenti |
Alcuni si impostano da soli e sono i più utili di tutti:
| Mark automatico | Dove 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 |
| Lista | Navigazione |
|---|---|
| jumplist | Ctrl-o indietro · Ctrl-i avanti · :jumps per vederla |
| changelist | g; 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.
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.
| Comando | Effetto |
|---|---|
| :vimgrep /pattern/ **/*.php | cerca 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 :cclose | apre / chiude la finestra dei risultati |
| :cn :cp | risultato successivo / precedente |
| :cfirst :clast | primo / ultimo |
| :cdo comando | esegue il comando su ogni risultato |
| :cfdo comando | lo esegue una volta per ogni file coinvolto |
if executable('rg')
set grepprg=rg\ --vimgrep\ --smart-case
set grepformat=%f:%l:%c:%m
endifConfrontare due file
$ vimdiff vecchio.conf nuovo.conf $ vim -d vecchio.conf nuovo.conf # identico, più corto
| Comando | Effetto in modalità diff |
|---|---|
| ]c [c | differenza successiva / precedente |
| do | diff obtain: prendi la versione dell'altro file |
| dp | diff put: manda la tua all'altro file |
| :diffupdate | ricalcola dopo le modifiche |
| :windo diffthis | attiva il confronto tra due finestre già aperte |
Sessioni: riprendere dove avevi lasciato
:mksession! ~/.vim/sessioni/progetto.vim # buffer, finestre, schede, cartella $ vim -S ~/.vim/sessioni/progetto.vim # e ritrovi tutto com'era
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.
: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.
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.
| Comando | Cosa apre |
|---|---|
| :help | la pagina iniziale, con l'indice generale |
| :help usr_toc | il manuale utente: trenta capitoli in ordine di difficoltà |
| :help quickref | una scheda riassuntiva di tutti i comandi |
| :help ciw | l'aiuto di un comando NORMAL specifico |
| :help i_CTRL-R | prefisso i_ per i comandi del modo INSERT |
| :help :g | prefisso : per i comandi ex |
| :help 'hidden' | gli apici per le opzioni |
| :helpgrep parola | cerca 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.
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.