Articolo originale: How not to be afraid of Vim anymore

Una raccolta dei comandi più frequenti e di come utilizzarli

Se hai mai usato Vim, sai quanto può essere difficile raggiungere la stessa velocità di un editor con un'interfaccia grafica "normale". Ma una volta che ne sei in grado, la ricompensa è inestimabile – diventi molto più efficiente nello scrivere codice. Naturalmente, questo non è lo scopo principale di questo articolo.

La maggior parte delle volte si tratta – o dovrebbe trattarsi – di progettare una soluzione a un problema, e non di scrivere effettivamente del codice; quindi ottimizzare quanto sei veloce a programmare sembra l'ultima cosa a cui dedicarsi. Non è un punto su cui far leva.

Questo articolo nasce per un'altra ragione: l'inesistenza di interfacce grafiche sulle macchine SSH. Cosa intendi fare adesso? Su qualsiasi macchina in cui hai accesso al terminale e vuoi modificare un file, hai due opzioni:

  1. Arrenderti e chiudere Vim
  2. Padroneggiare Vim

Fare una copia di vimtutor non aiuterebbe nessuno, quindi utilizzerò un approccio diverso: ho raccolto le migliori parti di Vim che uso nella mia vita quotidiana di sviluppatore, insieme ad alcuni tecniche mnemoniche con cui ricordare delle cose. Questo articolo contiene quasi tutto quello di cui hai bisogno per la scrittura e l'editing usuale.

Le basi

Resta con me, qui non si tratta solo dei comandi, ma dell'idea che c'è dietro!

Modalità

Vim ha due modalità:

  • Normale (Comando)
  • Inserimento (Modifica)

Quando apri Vim, parti in modalità normale. Per tornare in modalità normale in qualsiasi momento, premi il tasto ESC. La modalità normale è quella in cui puoi impartire dei comandi: la lista di comandi è infinita!

Esistono molti modi per entrare in modalità di inserimento. Quello più intuitivo è usare il comando i (per insert). In modalità normale, premi i ed entrerai in modalità di inserimento. Ora tutto ciò che scrivi sarà mostrato nell'editor. Abbiamo risolto uno degli ostacoli più grandi.

Il modello mentale per comprendere l'idea: dato che non c'è un'interfaccia grafica, non esiste il concetto del click del mouse. Non c'è un menu da cui scegliere opzioni, non c'è tasto destro. Dunque devi trovare un modo per ottenere tutto questo dalla tastiera – la tua unica sorgente di input.

Avere due modalità ti permette di raggiungere questa condizione! Puoi pensare alla modalità normale come alla barra del menu e al mouse potenziati, mentre la modalità di inserimento è come la modalità standard degli editor con interfacce grafiche (dove quello che scrivi viene mostrato sullo schermo).

Parole

Per Vim, parola ha quasi lo stesso significato che ha per noi – un insieme di caratteri separati da spazi o caratteri speciali. Il comando è w.

Anatomia dei comandi

In Vim, i comandi seguono una serie di schemi. Saperlo ti aiuterà a mettere ogni comando in un certo gruppo e a sviluppare un migliore modello mentale.

I comandi hanno questo aspetto:

[azione] <numero> [movimento]

L'azione è quello che vuoi fare.

Il numero è quante volte vuoi svolgere l'azione.

Il movimento è l'intervallo dell'azione.

Il movimento è il campo di applicazione. Un esempio potrebbe essere utile per chiarire. Diciamo che vogliamo cancellare 3 parole partendo dalla posizione del cursore. In questo caso, l'azione è cancellare, il numero è 3 e il movimento è una parola. Il comando azione per cancellare è d.

Dunque, otteniamo il comando finale come: d3w — cancella le prossime 3 parole.

Omettere il numero fa sì che l'azione venga svolta una volta sola.

I movimenti possono essere usati senza un'azione, per navigare. Quindi, scrivere w in modalità di comando sposterà il cursore avanti di una parola.

Ora siamo ben equipaggiati per iniziare a imparare dei comandi specifici (e un intervallo di movimenti da combinarvi).

Comandi utili

Come chiudere Vim

Prima di tutto, non vogliamo restare bloccati in Vimlandia senza avere un piano di uscita. Occorre sempre avere una strategia di fuga.

:q per uscire

:q! per uscire forzatamente

:wq per salvare e uscire

Comandi azione

d : cancella

i : inserimento

p : incolla

y : copia

x : taglia

u : annulla

di: cancella all'interno* (inside), yi : copia all'interno*

v : visual / selezione

/ : ricerca

% : bracket matching, la gioia degli sviluppatori!

:s : sostituisci! In altre parole, un trova e sostituisci potenziato

Dato che le azioni su una intera riga sono molto frequenti, gli sviluppatori di Vim hanno creato un'apposita scorciatoia – omettere il movimento. Ripeti l'azione per applicarla sull'intera riga. Ad esempio:

Per cancellare la riga corrente: dd

Per copiare la riga corrente: yy

Comandi movimento

Come abbiamo visto, i movimenti vanno con le azioni e i movimenti disponibili variano a seconda dell'azione. Tuttavia, alcuni movimenti sono piuttosto generali.

w : inizio della prossima parola (lo abbiamo già incontrato!)

e : fine della parola corrente

b : inizio della parola precedente

Tasti freccia / <h,j,k,l> : rispettivi spostamenti. h,j,k,l sono dei sostituti dei tasti freccia e la fonte della velocità di Vim: non devi spostare le mani lontano dalla parte della tastiera che ti serve per scrivere.

$ : fine della riga

0 : inizio della riga

G : fine del file

nG : vai alla riga numero n

) : vai avanti di una frase

} : vai avanti di un paragrafo

Questo esempio può aiutare a visualizzare meglio alcuni comandi:

           ge      b          w                             e
           <-     <-         --->                          --->
    This is-a line, with special/separated/words (and some more). ~
       <----- <-----         -------------------->         ----->
         gE      B                   W                       E

Armati di queste azioni e di questi movimenti, possiamo creare la maggior parte dei comandi di base in Vim. Ecco una lista di 8 funzioni che possono esserti utili quotidianamente. Prova a trovare il modo per svolgerle!

  1. Cancellare le prossime 3 righe (inclusa la corrente)
  2. Copiare la parola corrente — con il cursore all'inizio della parola
  3. Copiare la parola corrente — che ha caratteri speciali — cursore in mezzo alla parola
  4. Navigare 10 righe in giù
  5. Cancellare tutto all'interno delle parentesi graffe
  6. Andare su di due paragrafi
  7. Incollare il testo precedentemente selezionato 5 volte
  8. Scrivere dove si trova il cursore: “Adesso so usare Vim!”

Aspetta un attimo…

Ed ecco le soluzioni:

  1. d3j
  2. yw
  3. yiW : yi è per copiare all'interno e W l'oggetto da copiare (parola corrente). È estremamente utile, puoi usare ogni sorta di combinazione con inside!
  4. 10j
  5. di} : come il #3.
  6. 2{ : questa era un po' più intuitiva. { è per andare su di un paragrafo, } è per andare giù di un paragrafo
  7. 5p : ricordi i numeri opzionali? Possono essere usati quasi ovunque
  8. i Adesso so usare Vim! : i è per passare alla modalità di inserimento, in modo da poter lavorare come in un editor "normale"

Bene, ce l'hai fatta! Congratulazioni, questo ti dovrebbe essere sufficiente per andare all'esplorazione di Vim da solo, avventuriero. Il tutorial è finito. Buona fortuna.

Se qualcuno ti chiede di Vim, puoi fare di meglio che usare questo meme. Spiegagli tutto, oppure rimandalo qui ;)

QkqAG7RCyNb08rhtBYp24mYBdLK5UoHRDhII
*Nota: questo è il mio modello di Vim. Non è esattamente il modo in cui le cose funzionano internamente. Se consulti la documentazione ( :help user-manual ), vedrai che d è il comando e il movimento è iw (inside word). C'è una differenza.
Perché? — perché ritengo che in questo modo sia più chiaro.

Bonus

Ecco alcuni comandi extra che possono tornare utili:

Split screen

:vsplit <nomefile>

Crea una divisione verticale. Ti permette di fare copia e incolla da uno schermo all'atro.

Per passare tra gli schermi divisi: ctrl + w.

Alternativamente, puoi usare i tasti freccia/ hjkl, in questo modo:

ctrl + w + h per andare alla schermata precedente.

Puoi chiudere le finestre come fai normalmente (:q), oppure —

:only — per chiudere tutte le altre finestre.

Schede multiple

:tabnew <nomefile> apre un nuovo file in una nuova scheda su Vim

:tabn per andare alla scheda successiva (o :gt)

:tabp per andare alla scheda precedente (o :gT)

Di nuovo, puoi copiare e incollare una scheda in un'altra.

Puoi anche far corrispondere questa combinazione a dei tasti di tua scelta!

Ho provato <Ctrl-Tab>, ma era già riservata. Che peccato. Invece abbiamo:

map <Ctrl-t><sinistra> :tabp<cr>
map <Ctrl-t><destra> :tabn<cr>

Che vuol dire <Ctrl-t> seguito dal tasto freccia sinistro o destro.

Come sono arrivato a questa corrispondenza? Dai un'occhiata a questo tutorial (risorsa in inglese).

Altri articoli di questa serie: