VimCS: Editing: differenze tra le versioni
(special K :)) |
m (rimuove falso positivo in ricerca broken link) |
||
(10 versioni intermedie di 2 utenti non mostrate) | |||
Riga 18: | Riga 18: | ||
sostituzione con richiesta di conferma - ''':s/vecchio/nuovo/gc''' <br/> | sostituzione con richiesta di conferma - ''':s/vecchio/nuovo/gc''' <br/> | ||
sostituzione in tutto il documento - ''':%s/vecchio/nuovo/g''' <br/> | sostituzione in tutto il documento - ''':%s/vecchio/nuovo/g''' <br/> | ||
sostituzione in tutto il documento con richiesta di conferma (case insensitive) - ''':%s/vecchio/nuovo/gci''' <br/> | |||
sostituzione in tutti i buffer - ''':bufdo %s/vecchio/nuovo/ge | update''' | sostituzione in tutti i buffer - ''':bufdo %s/vecchio/nuovo/ge | update''' | ||
Riga 26: | Riga 27: | ||
dato un file con tante righe nella forma di ''foo bar baz <nowiki>http:// | dato un file con tante righe nella forma di ''foo bar baz <nowiki>http://indirizzo.di.esempio</nowiki>'', | ||
elimina i caratteri prima di 'http' per ogni riga e nell'intero documento: | elimina i caratteri prima di 'http' per ogni riga e nell'intero documento: | ||
'''<nowiki>:</nowiki>%s/^.\{-}\zehttp//g''' | '''<nowiki>:</nowiki>%s/^.\{-}\zehttp//g''' | ||
Riga 95: | Riga 96: | ||
cancella terza riga di un file | cancella terza riga di un file | ||
<pre>$ ex file.txt <<< $'3d\nw'</pre> | |||
cancella righe commentate | cancella righe commentate | ||
<pre>$ ex file.txt <<< $'g/^#/d\nw'</pre> | |||
dato un file contenente una sequenza di numeri (uno per riga) cancella tutto tranne 1 e 7 | dato un file contenente una sequenza di numeri (uno per riga) cancella tutto tranne 1 e 7 | ||
<pre>$ printf '%s\n' 1 2 3 4 5 6 7 > file.txt; ex file.txt <<< $'v/[17]/d\nw'</pre> | |||
''v'' è l'opposto di ''g'', come ''grep -v'' | ''v'' è l'opposto di ''g'', come ''grep -v'' | ||
Riga 115: | Riga 116: | ||
In caso di necessità è possibile invertire la direzione del cursore durante la selezione, se | 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: <br/> | ||
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: <br/> | |||
'''Vjok''' | '''Vjok''' | ||
Riga 127: | Riga 125: | ||
'''<nowiki>:</nowiki>'<,'>w nome_file''' | '''<nowiki>:</nowiki>'<,'>w nome_file''' | ||
Allacciandosi al discorso, si può invece inserire il testo di un altro file sulla riga sotto il | Allacciandosi al discorso, si può invece inserire il testo di un altro file sulla riga sotto il cursore: <br/> | ||
cursore: <br/> | |||
'''<nowiki>:</nowiki>r nome_file''' | '''<nowiki>:</nowiki>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: <br/> | Il punto esclamativo è un attivatore per comandi esterni, seguito da un comando apre una [[shell]] in una porzione di finestra e lo esegue: <br/> | ||
'''<nowiki>:</nowiki>!ls''' | '''<nowiki>:</nowiki>!ls''' | ||
Riga 188: | Riga 185: | ||
cancella tutte le righe dello schermo sotto il cursore - '''dL''' <br/> | cancella tutte le righe dello schermo sotto il cursore - '''dL''' <br/> | ||
cancella dalla riga in cui si trova il cursore alla fine del documento - '''dG''' <br/> | cancella dalla riga in cui si trova il cursore alla fine del documento - '''dG''' <br/> | ||
cancella dalla riga in cui si trova il cursore all'inizio del documento - ''' | cancella dalla riga in cui si trova il cursore all'inizio del documento - '''dgg''' <br/> | ||
cancella intero documento - '''ggdG''' <br/> | cancella intero documento - '''ggdG''' <br/> | ||
cancella parola e passa alla modalità inserimento - '''cw''' <br/> | cancella parola e passa alla modalità inserimento - '''cw''' <br/> | ||
Riga 204: | Riga 201: | ||
inserisce commento (#) ad inizio riga - ''':s/^/#/''' | inserisce commento (#) ad inizio riga - ''':s/^/#/''' | ||
== Annulla, ripeti, cronologia e ricerca == | == Annulla, ripeti, cronologia e ricerca == | ||
Riga 237: | Riga 233: | ||
cerca in avanti - '''N''' | cerca in avanti - '''N''' | ||
cerca parola in avanti (case insensitive) - '''/parola\c''' <br/> | |||
cerca parola indietro (case insensitive) - '''?parola\c''' <br/> | |||
numero di occorrenze di una parola - ''':%s/parola//gn''' | |||
disabilita l'evidenziazione delle parole dopo la ricerca - ''':noh''' | |||
== Autocompletamento == | == Autocompletamento == | ||
In modalità inserimento e sostituzione è possibile ottenere una lista di parole usate | In modalità inserimento e sostituzione è possibile ottenere una lista di parole usate precedentemente. <br/> | ||
precedentemente. <br/> | |||
'''Ctrl-x''' <br/> | '''Ctrl-x''' <br/> | ||
scorrimento tra i risultati - '''Ctrl-n''' / '''Ctrl-p''' <br/> | scorrimento tra i risultati - '''Ctrl-n''' / '''Ctrl-p''' <br/> | ||
Riga 248: | Riga 249: | ||
== Clipboard == | == Clipboard == | ||
Esistono tre tipi differenti di selezione: PRIMARY, SECONDARY, e CLIPBOARD, ma solo due vengono | Esistono tre tipi differenti di selezione: PRIMARY, SECONDARY, e CLIPBOARD, ma solo due vengono utilizzate. <br/> | ||
utilizzate. <br/> | * 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). | ||
* PRIMARY: il testo selezionato e incollato tramite il mouse, ovvero seleziona con il tasto 1 | * CLIPBOARD: il testo copiato o tagliato e incollato tramite i menù delle applicazioni o le classiche scorciatoie Ctrl-c / Ctrl-x / Ctrl-v. <br/> | ||
(sinistro, o destro per i mancini) e incolla con il tasto 2 (centrale). | |||
* CLIPBOARD: il testo copiato o tagliato e incollato tramite i | |||
[http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki Specifiche Freedesktop] | [http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki Specifiche Freedesktop] | ||
Riga 268: | Riga 267: | ||
Allo stesso modo, per copiare una riga senza prima selezionarla si useranno '''"*yy''' e '''"+yy''' | 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. | Il '''"''' (virgolette) attiva i registri, una sorta di clipboard dove immagazzinare porzioni di testo.<br/> | ||
'''*''' (asterisco) e '''+''' (più) fanno parte dei registri di selezione e rilascio del testo da e verso la | '''*''' (asterisco) e '''+''' (più) fanno parte dei registri di selezione e rilascio del testo da e verso la clipboard di Xorg. | ||
clipboard di Xorg. | |||
Un altro registro utile è il buco nero, il testo non viene salvato nella clipboard. | 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. | Un po' come usare /dev/null in una shell, utile per cancellare senza coinvolgere gli altri registri. | ||
cancella riga - '''"_dd''' | cancella riga - '''"_dd''' <br/> | ||
cancella tre righe - '''"_3dd''' | cancella tre righe - '''"_3dd''' | ||
Per approfondire e sapere di più sugli altri sette registri consultare la documentazione: | Per approfondire e sapere di più sugli altri sette registri consultare la documentazione: <br/> | ||
'''<nowiki>:</nowiki>help "''' | '''<nowiki>:</nowiki>help "''' <br/> | ||
'''<nowiki>:</nowiki>help :registers''' | '''<nowiki>:</nowiki>help :registers''' | ||
Riga 293: | Riga 291: | ||
* vim-gnome | * vim-gnome | ||
* vim-athena | * vim-athena | ||
[[Categoria: Elaborazione_testi]] |
Versione attuale delle 14:16, 19 dic 2015
Vim Cheat Sheet |
Sommario |
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.
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