VimCS: Editing

Da Guide@Debianizzati.Org.
Jump to navigation Jump to search
Vim Cheat Sheet

Sommario

  1. Introduzione
  2. Le basi
  3. Gestione dei file
  4. Editing
  5. Varie
  6. Configurazione
  7. Extra

Sostituzione

entra in modalità sostituzione - R
sostituisce singolo carattere e torna in modalità comando - r (seguito dal carattere)

maiuscole in minuscole e viceversa - ~
tutta la riga minuscola - guu (oppure vu)
solo una parola minuscola - vEu
tutta la riga maiuscola - gUU (oppure VU)
solo una parola maiuscola - vEU
inverte maiuscole e minuscole di una parola - vE~
inverte maiuscole e minuscole di una riga - g~~
intero file minuscolo - ggguG
intero file maiuscolo - gggUG

sostituzione prima corrispondenza sulla riga - :s/vecchio/nuovo/
sostituzione su tutta la riga - :s/vecchio/nuovo/g
sostituzione con richiesta di conferma - :s/vecchio/nuovo/gc
sostituzione in tutto il documento - :%s/vecchio/nuovo/g
sostituzione in tutto il documento con richiesta di conferma (case insensitive) - :%s/vecchio/nuovo/gci

sostituzione in tutti i buffer - :bufdo %s/vecchio/nuovo/ge | update

elimina le terminazioni di riga in stile DOS, ovvero quei simpatici ^M - :%s/\r/
se non fossero solo a fine riga, digitare :%s/ seguito da Ctrl-v e Ctrl-m, quindi aggiungere //g e fare la sostituzione:
:%s/^M//g


dato un file con tante righe nella forma di foo bar baz http://indirizzo.di.esempio, elimina i caratteri prima di 'http' per ogni riga e nell'intero documento: :%s/^.\{-}\zehttp//g


data una riga nella forma '11. foo' sostituisce il punto con un tab :s/\(^[0-9]\+\)\. /\1\t/


cancella tutto ciò che c'è dopo le virgolette :%s/".*//


cancella spazi non voluti a fine riga (trailing whitespace); \s cerca gli spazi bianchi (spazio o tab) e \+ cerca una o più occorrenze: :%s/\s\+$//

cerca soltanto: /\s\+$


seleziona e inserisce un cancelletto all'inizio di ogni riga selezionata Ctrl-v I # <Esc>


Inserisce contenuto di un registro all'inizio di ogni riga selezionata. Data una lista di voci come segue:

  • foo uno
  • due
  • tre
  • quattro
  • cinque
  • sei
  • sette

supponiamo di voler inserire 'foo', compreso lo spazio che segue, all'inizio delle successive quattro righe.

copiamo: vely
selezioniamo l'inizio delle altre righe: j Ctrl-v 3j
passiamo alla modalità inserimento visuale: I
incolliamo e torniamo alla modalità comando: Ctrl-r " <Esc>

La sequenza completa è dunque: velyj Ctrl-v 3jI Ctrl-r " <Esc>
Appare macchinoso ma è un'ottima alternativa alla modalità comando quando c'è bisogno di copiare stringhe complesse che, a causa di caratteri speciali e necessità di escape, risulterebbero scomode da inserire con il classico Ctrl-v :'<,'>s/^/foo /

:help v_b_I
:help i_CTRL-R


manda a capo in corrispondenza di ogni tag
:g,<br>,s,<br>,<br>\r,g


in una riga con molteplici 'foo' sostituisce solo il secondo :s/\(.*\)foo/\1bar/


ordina testo alfabeticamente - :sort

elimina righe uguali - :sort u


mostra tre righe di un testo (la 3, 45, 180) per un rapido confronto :3p|45p|180p


Alcuni semplici esempi di cosa si può fare con ex:

cancella terza riga di un file

$ ex file.txt <<< $'3d\nw'

cancella righe commentate

$ ex file.txt <<< $'g/^#/d\nw'

dato un file contenente una sequenza di numeri (uno per riga) cancella tutto tranne 1 e 7

$ printf '%s\n' 1 2 3 4 5 6 7 > file.txt; ex file.txt <<< $'v/[17]/d\nw'

v è l'opposto di g, come grep -v


Selezione e inserimento

Ora che sappiamo come gestire i file e come muoverci tra di essi è giunto il momento di produrre.
Come accennato all'inizio, la modalità visuale seleziona il testo.

inizia selezione - v
seleziona intera riga - V
seleziona blocco (per colonne) - Ctrl-v
seleziona tutto - ggVG


In caso di necessità è possibile invertire la direzione del cursore durante la selezione, se selezioniamo alcune righe dall'alto verso il basso e vogliamo in seguito selezionarne altre sopra, basterà premere o e il cursore si sposterà alla prima riga della selezione corrente quindi muovere il cursore verso l'alto; perciò i comandi per l'ipotetica situazione sono:
Vjok


Su di essa è anche possibile compiere le stesse operazioni della modalità comando, la differenza è che apparirà un prompt particolare ('<,'>), i comandi vanno inseriti subito dopo, senza spazio.
Ecco ad esempio come copiare del testo salvandolo in altro file:
v
:'<,'>w nome_file

Allacciandosi al discorso, si può invece inserire il testo di un altro file sulla riga sotto il cursore:
:r nome_file


Il punto esclamativo è un attivatore per comandi esterni, seguito da un comando apre una shell in una porzione di finestra e lo esegue:
:!ls

Possiamo quindi inserire nel documento qualsiasi output della shell:
:r !ls

In caso servisse una shell con piena funzionalità:
:shell

Si noti che è un sotto processo di Vim, ricordarsi dunque di uscire una volta finito :)


Indentazione

inserisce un'indentazione su riga - :>
inserisce due indentazioni su riga - :>>
toglie un'indentazione su riga - :<
toglie due indentazioni su riga - :<<
inserisce un'indentazione su 3 righe - :>3
inserisce un'indentazione sulla terza riga - :3>

inserisce - >> toglie - << inserisce su tre righe - 3>> toglie su tre righe - 3<< inserisce sulla terza riga partendo da dove è posizionato il cursore - 2j>>

rimuove indentazione all'intero file - gg=G


Copia, taglia, incolla, cancella

Questo funziona solo all'interno della sessione corrente di Vim.
copia testo selezionato - y
copia prima parola di una riga - yw
copia intera riga - yy

incolla testo tagliato sotto la riga dove è il cursore - p
incolla testo tagliato sopra la riga dove è il cursore - P

mette la riga sottostante in coda alla corrente - J


cancella carattere - x
cancella tre caratteri - 3x
cancella dal cursore all'inizio della parola seguente - dw
cancella dal cursore alla fine della parola corrente - de
cancella dal cursore all'inizio della parola corrente - db
cancella la parola che si trova sotto al cursore - daw
cancella la parola che si trova sotto al cursore e ritorna in modalità inserimento - caw
cancella dal cursore alla fine della riga - D
cancella dal cursore alla fine della riga - d$
cancella intera riga compreso spazio occupato - dd
cancella tre righe - 3dd
cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso - df (seguito dal carattere)
cancella sulla riga corrente dal cursore fino ad un determinato carattere escluso - dt (seguito dal carattere)
cancella tutte le righe dello schermo sotto il cursore - dL
cancella dalla riga in cui si trova il cursore alla fine del documento - dG
cancella dalla riga in cui si trova il cursore all'inizio del documento - dgg
cancella intero documento - ggdG
cancella parola e passa alla modalità inserimento - cw
cancella riga e passa alla modalità inserimento - cc
cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso e passa alla modalità inserimento - cf (seguito dal carattere)
cancella sulla riga corrente dal cursore fino ad un determinato carattere escluso e passa alla modalità inserimento - ct (seguito dal carattere)

cancella ogni riga che inizia con una certa parola - :g/^parola/d
cancella ogni riga che termina con una certa parola - :g/parola$/d
cancella ogni riga che contiene una certa parola - :g/parola/d
cancella le righe commentate - :g/^#/d
cancella le righe vuote - :v/\S/d

inserisce commento (#) ad inizio riga - :s/^/#/

Annulla, ripeti, cronologia e ricerca

Per annullare o ripetere una modifica si userà:
undo - u
undo di una riga - U

redo - Ctrl-r


Per l'ultima operazione effettuata, qualunque essa sia, e quindi automatizzare un po' le ripetizioni si usa il punto:
.


Per la modalità comando:
ripete ultima operazione - @:
mostra la history dei comandi - :history
mostra la history con comandi selezionabili - q:
mostra la history di ricerca con comandi selezionabili - q/ (successivo)
mostra la history di ricerca history con comandi selezionabili - q? (precedente)

mostra la lista dei comandi interni che iniziano per a - :a Ctrl-d

La ricerca funziona come per tante altre applicazioni:
cerca parola in avanti - /parola
ripete ricerca in avanti - n
cerca indietro - N

cerca parola indietro - ?parola
ripete ricerca indietro - n
cerca in avanti - N

cerca parola in avanti (case insensitive) - /parola\c
cerca parola indietro (case insensitive) - ?parola\c

numero di occorrenze di una parola - :%s/parola//gn

disabilita l'evidenziazione delle parole dopo la ricerca - :noh

Autocompletamento

In modalità inserimento e sostituzione è possibile ottenere una lista di parole usate precedentemente.
Ctrl-x
scorrimento tra i risultati - Ctrl-n / Ctrl-p
annulla - Ctrl-e
accetta parola selezionata - Ctrl-y (oppure Enter)


Clipboard

Esistono tre tipi differenti di selezione: PRIMARY, SECONDARY, e CLIPBOARD, ma solo due vengono utilizzate.

  • PRIMARY: il testo selezionato e incollato tramite il mouse, ovvero seleziona con il tasto 1 (sinistro, o destro per i mancini) e incolla con il tasto 2 (centrale).
  • CLIPBOARD: il testo copiato o tagliato e incollato tramite i menù delle applicazioni o le classiche scorciatoie Ctrl-c / Ctrl-x / Ctrl-v.

Specifiche Freedesktop

Ovviamente con il mouse non è prevista una funzione che taglia, ma questa può comunque funzionare ad esempio tra due sessioni diverse di Vim.

PRIMARY:

copia - "*y
taglia - "*x
incolla - "*p

CLIPBOARD:

copia - "+y
taglia - "+x
incolla - "+p

Allo stesso modo, per copiare una riga senza prima selezionarla si useranno "*yy e "+yy

Il " (virgolette) attiva i registri, una sorta di clipboard dove immagazzinare porzioni di testo.
* (asterisco) e + (più) fanno parte dei registri di selezione e rilascio del testo da e verso la clipboard di Xorg. Un altro registro utile è il buco nero, il testo non viene salvato nella clipboard. Un po' come usare /dev/null in una shell, utile per cancellare senza coinvolgere gli altri registri.

cancella riga - "_dd
cancella tre righe - "_3dd

Per approfondire e sapere di più sugli altri sette registri consultare la documentazione:
:help "
:help :registers


Per evitare di avere dipendenze extra che riguardano Xorg, la versione di Vim presente in Debian è compilata senza il supporto alla clipboard, lo si può verificare con:
:version

cercando clipboard e xterm_clipboard nell'elenco delle funzionalità, oppure con una ricerca mirata, che produrrà 1 se presente o 0 se non lo è:
:echo has('clipboard')
:echo has('xterm_clipboard')

per ottenere questo si dovrà installare una delle interfacce grafiche a scelta tra:

  • vim-gtk
  • vim-gnome
  • vim-athena