|
|
Riga 25: |
Riga 25: |
|
| |
|
|
| |
|
| = Iniziare a scrivere = | | = [[VimCS:_Basi|Basi]] = |
| Ci sono vari modi di attivare la modalità inserimento, a seconda delle esigenze e della posizione del cursore.
| | * Iniziare a scrivere |
| | * Come muoversi |
| | * Salvare il documento |
| | * Uscire da Vim |
|
| |
|
| a sinistra del cursore - '''i''' <br/>
| |
| a destra del cursore - '''a''' <br/>
| |
| a inizio riga - '''I''' <br/>
| |
| a fine riga - '''A''' <br/>
| |
| sulla riga sotto il cursore - '''o''' <br/>
| |
| sulla riga sopra il cursore - '''O''' <br/>
| |
|
| |
|
| | = [[VimCS:_Gestione|Gestione]] = |
| | * Buffer |
| | * Finestre |
| | * Tab |
|
| |
|
| = Come muoversi =
| |
| sposta cursore a sinistra - '''h''' <br/>
| |
| sposta cursore a destra - '''l''' <br/>
| |
| sposta cursore su - '''j''' <br/>
| |
| sposta cursore giù - '''k'''
| |
|
| |
|
| sposta cursore avanti all'inizio della parola successiva - '''w''' <br/>
| | = [[VimCS:_Editing|Editing]] = |
| sposta cursore indietro all'inizio della parola successiva - '''b'''
| | * Sostituzione |
| | * Selezione e inserimento |
| | * Indentazione |
| | * Copia, taglia, incolla, cancella |
| | * Annulla, ripeti, cronologia e ricerca |
| | * Autocompletamento |
| | * Clipboard |
|
| |
|
| sposta cursore avanti all'inizio della parola successiva ignorando la punteggiatura - '''W''' <br/>
| |
| sposta cursore indietro all'inizio della parola successiva ignorando la punteggiatura - '''B'''
| |
|
| |
|
| sposta cursore tre parole avanti all'inizio della parola - '''3w''' <br/>
| | = [[VimCS:_Varie|Varie]] = |
| sposta cursore tre parole indietro all'inizio della parola - '''3b'''
| | * Differenze |
| | * Creare html |
| | * Cifratura testo |
| | * Vim remote |
|
| |
|
| sposta cursore avanti alla fine della parola - '''e''' <br/>
| |
| sposta cursore indietro alla fine della parola - '''ge'''
| |
|
| |
|
| sposta cursore avanti alla fine della parola successiva ignorando la punteggiatura - '''E''' <br/>
| | = [[VimCS:_Configurazione|Configurazione]] = |
| sposta cursore indietro alla fine della parola successiva ignorando la punteggiatura - '''gE'''
| | * .vimrc |
| | * .vim/ |
| | * Gerarchia della directory .vim/ |
|
| |
|
| sposta cursore tre parole avanti alla fine - '''3e''' <br/>
| |
| sposta cursore al primo carattere della riga - '''|''' <br/>
| |
| sposta cursore al terzo carattere della riga - '''3|''' <br/>
| |
| sposta cursore al primo carattere non bianco - '''^'''
| |
|
| |
|
| sposta cursore ad inizio riga - '''0''' <br/>
| | = [[VimCS:_Extra|Extra]] = |
| sposta cursore a fine riga - '''$'''
| | * Extra |
| | | * Easter egg |
| sposta cursore una pagina avanti - '''ctrl-f''' (oppure '''ctrl-d''') <br/>
| | * Riferimenti |
| sposta cursore una pagina indietro - '''ctrl-b''' (oppure '''ctrl-u''')
| |
| | |
| sposta cursore avanti ad inizio frase - ''')''' <br/>
| |
| sposta cursore indietro ad inizio frase - '''('''
| |
| | |
| sposta cursore su ad inizio paragrafo - '''{''' <br/>
| |
| sposta cursore giù a fine paragrafo - '''}'''
| |
| | |
| sposta cursore a inizio documento - '''gg''' (oppure '''[[''') <br/>
| |
| sposta cursore a fine documento - '''G''' (oppure ''']]''') <br/>
| |
| sposta cursore alla riga 33 - '''33 G''' (oppure ''':33''')
| |
| | |
| sposta cursore alla prima riga dello schermo - '''H''' <br/>
| |
| sposta cursore all'ultima riga dello schermo - '''L''' <br/>
| |
| sposta cursore alla riga al centro dello schermo - '''M''' <br/>
| |
| sposta cursore alla terza riga dello schermo - '''3H''' <br/>
| |
| sposta cursore alla terzultima riga dello schermo - '''3L'''
| |
| | |
| sposta il cursore sulla parentesi corrispondente ad una chiusa o aperta - '''%''' <br/>
| |
| | |
| mostra il nome del file, la quantità di righe e la posizione in cui è il cursore - '''ctrl-g'''
| |
| | |
| | |
| Spostandosi da un punto all'altro del documento, Vim ricorda gli ultimi due; paragonando questo
| |
| comportamento a bash, si pensi ai comandi <code>cd</code> e <code>cd -</code> : <br/>
| |
| : torna alla posizione precedente - '''ctrl-o''' <br/>
| |
| : vai alla posizione successiva - '''ctrl-i'''
| |
| | |
| Se invece volessimo una specie di segnalibro per tornare ad un punto preciso: <br/>
| |
| : '''m''' (seguito dal carattere)
| |
| | |
| e quindi tornarvi in qualsiasi momento: <br/>
| |
| : ' (seguito dal carattere)
| |
| | |
| | |
| = Salvare il documento =
| |
| salva file già esistente - ''':w''' <br/>
| |
| salva file non esistente - ''':w nome_file'''
| |
| | |
| salva più file aperti, che siano buffer o tab - ''':wa''' <br/>
| |
| salva con altro nome, fa una copia mantendendo l'originale - ''':sav nome_file'''
| |
| | |
| | |
| = Uscire da Vim =
| |
| esce - ''':q''' <br/>
| |
| esce da tutti, che siano buffer o tab - ''':qa''' <br/>
| |
| salva ed esce - ''':wq''' (oppure ''':x''' oppure '''ZZ''') <br/>
| |
| salva tutti, che siano buffer o tab - ''':wa''' <br/>
| |
| esce senza salvare - ''':q!''' (oppure '''ZQ''')
| |
| | |
| mappa la sequenza di tasti <code>ZW</code> per salvare senza chiudere: <br/>
| |
| : ''':map ZW :w<cr>'''
| |
| | |
| | |
| = Apertura e gestione dei file =
| |
| Si possono aprire molteplici file e gestirli in vari modi: <br/>
| |
| * visualizzandone uno alla volta, questi sono chiamati buffer
| |
| * dividerli in split orizzontali e verticali, questi sono chiamati finestre
| |
| * visualizzazione in tab
| |
| | |
| Proprio come un browser web, l'uso dei tab è preferibilmente confinato a dividere progetti diversi, "un file = un tab" non è nella filosofia di un "vimmer" che si rispetti :) e il passaggio tra uno e l'altro è inoltre più scomodo di quanto si possa pensare. <br/>
| |
| Con l'aiuto di alcune mappe di tasti create apposta o di script, i buffer restano il modo più
| |
| pratico e veloce per tenere aperti tanti file e muoversi tra di essi.
| |
| | |
| apre file - ''':e nome_file'''
| |
| | |
| apre file nuovo - ''':enew'''
| |
| | |
| == Buffer ==
| |
| Aprendo due o più file ci si puo' spostare tra uno e l'altro usando: <br/>
| |
| '''<nowiki>:</nowiki>n''' (successivo) <br/>
| |
| '''<nowiki>:</nowiki>prev''' (precedente) <br/>
| |
| '''<nowiki>:</nowiki>bn''' (successivo) <br/>
| |
| '''<nowiki>:</nowiki>bp''' (precedente) <br/>
| |
| '''<nowiki>:</nowiki>e#''' (consente il passaggio veloce tra il precedente buffer e il corrente)
| |
| | |
| Il passaggio veloce tra l'ultimo buffer e il corrente si ottiene anche con: <br/>
| |
| '''ctrl-^''' (oppure '''ctrl-6''') <br/>
| |
| '''N ctrl-^''' (dove '''N''' è il numero del buffer) <br/>
| |
| | |
| Si può ottenere una lista dei buffer aperti in tre modi diversi: <br/>
| |
| '''<nowiki>:</nowiki>ls''' <br/>
| |
| '''<nowiki>:</nowiki>buffers''' <br/>
| |
| '''<nowiki>:</nowiki>files''' <br/>
| |
| | |
| Verrà mostrata una riga per ogni file aperto con un numero che lo identifica, un indicatore dello stato, il nome del file e la riga in cui è il cursore; si noti che il numero è univoco e non cambia, se si chiude un file rimarrà il "buco" nella sequenza numerica. <br/>
| |
| Per la spiegazione degli indicatori leggere il relativo help. <br/>
| |
| '''<nowiki>:</nowiki>h :ls'''
| |
| | |
| passa a un buffer specifico - ''':b numero_buffer''' <br/>
| |
| chiude il buffer corrente - ''':bd''' <br/>
| |
| chiude un buffer specifico - ''':bd numero_buffer'''
| |
| | |
| | |
| == Finestre ==
| |
| divide finestra orizzontalmente - ''':split''' (oppure '''ctrl-w s''') <br/>
| |
| divide finestra verticalmente - ''':vsplit''' (oppure '''ctrl-w v''')
| |
| | |
| Il comportamento predefinito è di riportare nello split lo stesso file, dopodiché si può aprirne
| |
| uno diverso usando i comandi dei buffer; in caso si voglia subito una finestra vuota possiamo farlo tranquillamente per lo split orizzontale, mentre per il verticale dovremo ricorrere ad una mappa. <br/>
| |
| | |
| divide creando finestra orizzontale vuota - '''ctrl-w n''' <br/>
| |
| mappa la sequenza di tasti <code>ctrl-w V</code> per creare una finestra verticale vuota: <br/>
| |
| : ''':map <C-W>V :vne<cr>'''
| |
| | |
| Come si può vedere il comando è <code>:map</code> seguito dalla scorciatoia desiderata, i caratteri speciali come Control e le eventuali sequenze vanno messe tra less e greater, poi il carattere aggiuntivo, quindi il comando vero e proprio, che è <code>:vne</code>, ed infine <code><cr></code> che è carriage return ed equivale a premere il tasto Return appunto (l'invio, quello che impropriamente chiamiamo Enter, è invece quello sul tastierino numerico :).
| |
| | |
| Tutti i comandi dati in questo modo durano solo per la sessione in corso, per averli permanenti
| |
| vanno inseriti nel file <code>~/.vimrc</code>; i due punti possono essere omessi.
| |
| | |
| È possibile aprire una finestra con una dimensione predefinita (ad esempio, :33split): <br/>
| |
| '''<nowiki>:</nowiki>NUMEROsplit''' <br/>
| |
| '''<nowiki>:</nowiki>NUMEROvsplit'''
| |
| | |
| muoversi tra le finestre - '''ctrl-w w''' <br/>
| |
| muoversi in una finestra precisa: <br/>
| |
| '''ctrl-w h''' sinistra <br/>
| |
| '''ctrl-w j''' sotto <br/>
| |
| '''ctrl-w k''' sopra <br/>
| |
| '''ctrl-w l''' destra <br/>
| |
| '''ctrl-w t''' piu' in alto <br/>
| |
| '''ctrl-w b''' piu' in basso
| |
| | |
| ridimensionare orizzontalmente: <br/>
| |
| '''ctrl-w +''' <br/>
| |
| '''ctrl-w -'''
| |
| | |
| con numero di righe predefinito (ad esempio, 33 ctrl-w +): <br/>
| |
| '''NUMERO ctrl-w +''' <br/>
| |
| '''NUMERO ctrl-w -'''
| |
| | |
| con dimensione predefinita: '''NUMERO ctrl-w _''' <br/>
| |
| | |
| ridimensiona verticalmente: <br/>
| |
| '''NUMERO ctrl-w <''' <br/>
| |
| '''NUMERO ctrl-w >''' <br/>
| |
| '''NUMERO ctrl-w ='''
| |
| | |
| inverte posizione finestra orizzontale: <br/>
| |
| verso l'alto - '''ctrl-w R''' <br/>
| |
| verso il basso - '''ctrl-w r''' <br/>
| |
| indipendente dal focus - '''ctrl-w x'''
| |
| | |
| inverte posizione finestra verticale: <br/>
| |
| muovi a sinistra - '''ctrl-w H''' <br/>
| |
| muovi a destra - '''ctrl-w L''' <br/>
| |
| muovi in alto - '''ctrl-w K''' <br/>
| |
| muovi in basso - '''ctrl-w J'''
| |
| | |
| chiude finestra - ''':close''' (oppure '''ctrl-w c''') <br/>
| |
| chiudi finestra tranne la corrente - '''ctrl-w o'''
| |
| | |
| Si possono aprire in finestre più buffer già presenti: <br/>
| |
| apre tutti in finestre orizzontali - ''':ball''' <br/>
| |
| apre tutti in finestre verticali - ''':vertical ball'''
| |
| | |
| apre più file in finestre orizzontali:
| |
| <pre>
| |
| $ vim -o nome_file1 nome_file2
| |
| </pre>
| |
| apre piu' file in finestre verticali
| |
| <pre>
| |
| $ vim -O nome_file1 nome_file2
| |
| </pre>
| |
| apre finestra corrente in un tab - '''ctrl-w T'''
| |
| | |
| scorre le finestre assieme in stile vimdiff - ''':set scrollbind'''
| |
| | |
| apre esplorazione file - ''':Explore''' <br/>
| |
| apre finestra verticale di esplorazione file - ''':Vexplore'''
| |
| | |
| | |
| == Tab ==
| |
| apre tab - ''':tabnew''' <br/>
| |
| chiude tab - ''':close'''
| |
| | |
| apre file in un nuovo tab - ''':tabedit nome_file'''
| |
| | |
| apre più file in tab:
| |
| <pre>
| |
| $ vim -p nome_file1 nome_file2
| |
| </pre>
| |
| | |
| apre più buffer in tab - ''':tab ball'''
| |
| | |
| muoversi tra tab: <br/>
| |
| successivo - ''':tabn''' (oppure '''gt''') <br/>
| |
| precedente - ''':tabp''' (oppure '''gT''')
| |
| | |
| | |
| = Editing =
| |
| | |
| == Sostituzione ==
| |
| entra in modalità sostituzione - '''R''' <br/>
| |
| sostituisce singolo carattere e torna in modalità comando - '''r''' (seguito dal carattere)
| |
| | |
| maiuscole in minuscole e viceversa - '''~''' <br/>
| |
| tutta la riga minuscola - '''guu''' (oppure '''vu''') <br/>
| |
| solo una parola minuscola - '''vEu''' <br/>
| |
| tutta la riga maiuscola - '''gUU''' (oppure '''VU''') <br/>
| |
| solo una parola maiuscola - '''vEU''' <br/>
| |
| inverte maiuscole e minuscole di una parola - '''vE~''' <br/>
| |
| inverte maiuscole e minuscole di una riga - '''g~~''' <br/>
| |
| intero file minuscolo - '''ggguG''' <br/>
| |
| intero file maiuscolo - '''gggUG'''
| |
| | |
| sostituzione prima corrispondenza sulla riga - ''':s/vecchio/nuovo''' <br/>
| |
| sostituzione su tutta la riga - ''':s/vecchio/nuovo/g <br/>
| |
| sostituzione con richiesta di conferma - ''':s/vecchio/nuovo/gc''' <br/>
| |
| sostituzione in tutto il documento - ''':%s/vecchio/nuovo''' <br/>
| |
| | |
| sostituzione in tutti i buffer - ''':bufdo %s/vecchio/nuovo/ge | update'''
| |
| | |
| elimina le terminazioni di riga in stile dos, ovvero quei simpatici <code>^M</code> - ''':%s/\r/''' <br/>
| |
| se non fossero solo a fine riga, digitare <code>:%s/</code> seguito da <code>ctrl-v</code> e <code>ctrl-m</code>, quindi aggiungere <code>//g</code> e fare la sostituzione: <br/>
| |
| : ''':%s/^M//g'''
| |
| | |
| | |
| dato un file con tante righe nella forma di ''foo bar baz http://bla'' <br/>
| |
| elimina i caratteri prima di 'http' per ogni riga e nell'intero documento:
| |
| : ''':%s/^.\{-}\zehttp//g'''
| |
| | |
| | |
| ordina testo alfabeticamente - ''':sort'''
| |
| | |
| | |
| == Selezione e inserimento ==
| |
| Ora che sappiamo come gestire i file e come muoverci tra di essi è giunto il momento di produrre. <br/>
| |
| Come accennato all'inizio, la modalità visuale seleziona il testo.
| |
| | |
| inizia selezione - '''v''' <br/>
| |
| seleziona intera riga - '''V''' <br/>
| |
| seleziona blocco (salta righe vuote) - '''ctrl-v''' <br/>
| |
| seleziona tutto - '''ggVG''' <br/>
| |
| | |
| 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. <br/>
| |
| Ecco ad esempio come copiare del testo salvandolo in altro file: <br/>
| |
| '''v''' <br/>
| |
| '''<nowiki>:</nowiki>'<,'>w nome_file'''
| |
| | |
| Allacciandosi al discorso, si può invece inserire il testo di un altro file sulla riga sotto il
| |
| cursore: <br/>
| |
| '''<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/>
| |
| '''<nowiki>:</nowiki>!ls'''
| |
| | |
| Possiamo quindi inserire nel documento qualsiasi output della shell: <br/>
| |
| <nowiki>:</nowiki>r !ls
| |
| | |
| In caso servisse una shell con piena funzionalità: <br/>
| |
| <nowiki>:</nowiki>shell
| |
| | |
| Si noti che è un sotto processo di Vim, ricordarsi dunque di uscire una volta finito :)
| |
| | |
| | |
| == Indentazione ==
| |
| inserisce un'indentazione su riga - ''':>''' <br/>
| |
| inserisce due indentazioni su riga - ''':>>''' <br/>
| |
| toglie un'indentazione su riga - :<''' <br/>
| |
| toglie due indentazioni su riga - ''':<<''' <br/>
| |
| inserisce un'indentazione su 3 righe - ''':>3''' <br/>
| |
| inserisce un'indentazione sulla terza riga - ''':3>''' <br/>
| |
| | |
| scorciatoie: <br/>
| |
| '''>>''' (inserisce) <br/>
| |
| '''<<''' (toglie) <br/>
| |
| '''=''' (toglie)
| |
| | |
| | |
| == Copia, taglia, incolla, cancella ==
| |
| Questo funziona solo all'interno della sessione corrente di Vim. <br/>
| |
| copia testo selezionato - '''y''' <br/>
| |
| copia prima parola di una riga - '''yw''' <br/>
| |
| copia intera riga - '''yy'''
| |
| | |
| incolla testo tagliato sotto la riga dove è il cursore - '''p''' <br/>
| |
| | |
| mette la riga sottostante in coda alla corrente - '''J'''
| |
| | |
| | |
| cancella carattere - '''x''' <br/>
| |
| cancella tre caratteri - '''3x''' <br/>
| |
| cancella parola a destra del cursore - '''dw''' <br/>
| |
| cancella parola a sinistra del cursore - '''db''' <br/>
| |
| cancella ciò che si trova sotto al cursore - '''D''' <br/>
| |
| cancella intera riga - '''d$''' <br/>
| |
| cancella intera riga compreso spazio occupato - '''dd''' <br/>
| |
| cancella tre righe - '''3dd''' <br/>
| |
| cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso - '''df''' (seguito dal carattere) <br/>
| |
| cancella sulla riga corrente dal cursore fino ad un determinato carattere escluso - '''dt''' (seguito dal carattere) <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 all'inizio del documento - '''dg''' <br/>
| |
| cancella intero documento - '''ggdG''' <br/>
| |
| cancella parola e passa alla modalità inserimento - '''cw''' <br/>
| |
| cancella riga e passa alla modalità inserimento - '''cc''' <br/>
| |
| cancella sulla riga corrente dal cursore fino ad un determinato carattere compreso e passa alla
| |
| modalità inserimento - '''cf''' (seguito dal carattere) <br/>
| |
| 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''' <br/>
| |
| cancella ogni riga che termina con una certa parola - ''':g/parola$/d''' <br/>
| |
| cancella ogni riga che contiene una certa parola - ''':g/parola/d''' <br/>
| |
| cancella le righe commentate - ''':g/^#/d''' <br/>
| |
| 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à: <br/>
| |
| undo - '''u''' <br/>
| |
| 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: <br/>
| |
| '''.'''
| |
| | |
| | |
| Per la modalità comando: <br/>
| |
| ripete ultima operazione - '''@:''' <br/>
| |
| mostra la history dei comandi - ''':history''' <br/>
| |
| mostra la history con comandi selezionabili - '''q:''' <br/>
| |
| mostra la history di ricerca con comandi selezionabili - '''q/''' (successivo) <br/>
| |
| mostra la history di ricerca history con comandi selezionabili - '''q?''' (precedente) <br/>
| |
| | |
| mostra la lista dei comandi interni che iniziano per a - ''':a ctrl-d'''
| |
| | |
| La ricerca funziona come per tante altre applicazioni: <br/>
| |
| cerca parola in avanti - '''/parola''' <br/>
| |
| ripete ricerca in avanti - '''n'''
| |
| | |
| cerca parola indietro - '''?parola''' <br/>
| |
| ripete ricerca indietro - '''N'''
| |
| | |
| == Autocompletamento ==
| |
| In modalità inserimento e sostituzione è possibile ottenere una lista di parole usate
| |
| precedentemente. <br/>
| |
| '''ctrl-x''' <br/>
| |
| scorrimento tra i risultati - '''ctrl-n''' / '''ctrl-p''' <br/>
| |
| annulla - '''ctrl-e''' <br/>
| |
| accetta parola selezionata - '''ctrl-y''' (oppure Enter)
| |
| | |
| | |
| == Clipboard ==
| |
| Esistono tre tipi differenti di selezione: PRIMARY, SECONDARY, e CLIPBOARD, ma solo due vengono
| |
| 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).
| |
| * CLIPBOARD: il testo copiato o tagliato e incollato tramite i menu delle applicazioni o le classiche scorciatoie ctrl-c/ctrl-x/ctrl-v. <br/>
| |
| [http://www.freedesktop.org/wiki/Specifications/ClipboardsWiki 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: <br/>
| |
| copia - '''"*y''' <br/>
| |
| taglia - '''"*x''' <br/>
| |
| incolla - '''"*p'''
| |
| | |
| :CLIPBOARD: <br/>
| |
| copia - '''"+y''' <br/>
| |
| taglia - '''"+x''' <br/>
| |
| incolla - '''"+p'''
| |
| | |
| 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: <br/>
| |
| '''<nowiki>:</nowiki>version'''
| |
| | |
| cercando <code>clipboard</code> e <code>xterm_clipboard</code> nell'elenco delle funzionalità, oppure con una ricerca mirata, che produrrà '''1''' se presente o '''0''' se non lo è: <br/>
| |
| '''<nowiki>:</nowiki>echo has('clipboard')''' <br/>
| |
| '''<nowiki>:</nowiki>echo has('xterm_clipboard')'''
| |
| | |
| per ottenere questo si dovrà installare una delle interfacce grafiche a scelta tra: <br/>
| |
| * vim-gnome
| |
| * vim-gtk
| |
| * vim-lesstif
| |
| | |
| | |
| = Differenze =
| |
| Una funzione irrinunciabile, controllare le differenze tra due o più file.
| |
| | |
| apre una finestra orizzontale diff - ''':diffsplit''' <br/>
| |
| apre una finestra verticale diff - ''':vert diffsplit''' <br/>
| |
| aggiorna diff dopo cambiamenti - ''':diffupdate'''
| |
| | |
| vimdiff è un modo per richiamare vim con l'opzione -d:
| |
| <pre>
| |
| $ vimdiff nome_file1 nome_file2
| |
| </pre>
| |
| Un paio di hack per controllare le differenze tra directory:
| |
| <pre>
| |
| $ vimdiff <(ls -R $DIR1) <(ls -R $DIR2)
| |
| $ vim -c 'e nome_directory1' -c diffthis -c 'vert split nome_directory2' -c diffthis
| |
| </pre>
| |
| | |
| Apre due tab con il diff di due file in ognuno:
| |
| <pre>
| |
| $ vim -c 'e nome_file1' -c diffthis -c 'vert split nome_file2' -c diffthis -c 'tabnew' \
| |
| -c 'e nome_file3' -c diffthis -c 'vert split nome_file3' -c diffthis
| |
| </pre>
| |
| | |
| | |
| = Creare html =
| |
| Converte in html il buffer corrente, mostrandolo in una finestra orrizzontale, il nuovo file avrà lo stesso nome con l'aggiunta dell'estensione .html, ereditando i colori dello schema in uso: <br/>
| |
| '''<nowiki>:</nowiki>TOhtml'''
| |
| | |
| crea un html da linea di comando:
| |
| <pre>
| |
| $ vim -n -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1
| |
| </pre>
| |
| | |
| testo scuro su sfondo chiaro:
| |
| <pre>
| |
| $ vim -n -c 'set background=light' -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1
| |
| </pre>
| |
| testo chiaro su sfondo scuro:
| |
| <pre>
| |
| $ vim -n -c 'set background=dark' -c 'TOhtml' -c 'wqa' nome_file > /dev/null 2>&1
| |
| </pre>
| |
| | |
| | |
| = Cifratura testo =
| |
| <pre>
| |
| $ vim -x nome_file
| |
| </pre>
| |
| cifratura senza file swap (più sicuro):
| |
| <pre>
| |
| $ vim -x -n nome_file
| |
| </pre>
| |
| Per aprirlo le volte successive non serve l'opzione ''-x'', Vim aggiunge una stringa per il
| |
| riconoscimento. Per disattivare la cifratura dal file aperto digitare: <br/>
| |
| <nowiki>:</nowiki>set key= <br/>
| |
| | |
| ovvero lasciando campo vuoto, per riattivarla si usa invece: <br/>
| |
| '''<nowiki>:</nowiki>X'''
| |
| | |
| La chiave viene sostituita da asterischi altrimenti sarebbe in chiaro (ma non viene memorizzata
| |
| nella history).
| |
| | |
| ROT13 encoding/decoding - '''g?'''
| |
| | |
| | |
| = Vim remote =
| |
| Vim può funzionare come un server che accetta istruzioni da linea di comando. Aprire un terminale e digitare:
| |
| <pre>
| |
| $ vim --servername debianizzati
| |
| </pre>
| |
| | |
| Il nome dato è assolutamente arbitrario. <br/>
| |
| Ora si può aprire un altro terminale che fungerà da client e fare qualche prova.
| |
| Passiamo in modalità inserimento e scriviamo qualcosa:
| |
| <pre>
| |
| $ vim --servername debianizzati --remote-send 'i La guida su Vim di Debianizzati.org<cr>'
| |
| </pre>
| |
| | |
| Torniamo in modalità comando e apriamo un'altra finestra:
| |
| <pre>
| |
| $ vim --servername debianizzati --remote-send '<esc><c-w>s<cr>'
| |
| </pre>
| |
| Salviamo il file e chiudiamo Vim:
| |
| <pre>
| |
| $ vim --servername debianizzati --remote-send '<esc>:w /tmp/debianizzati<cr>:qa<cr>'
| |
| </pre>
| |
| Non sarà comodissimo ma si può fare anche questo :) <br/>
| |
| Per gli altri comandi leggere l'help. <br/>
| |
| '''<nowiki>:</nowiki>h --remote'''
| |
| | |
| | |
| = Configurazione =
| |
| Personalmente utilizzo una statusbar ben configurata, ma a qualcuno piace avere i numeri delle
| |
| righe alla sinistra del testo: <br/>
| |
| visualizza numeri riga - ''':set number''' <br/>
| |
| rimuove visualizzazione - ''':set nonumber'''
| |
| | |
| C'è anche chi vuole il mouse, ho le convulsioni al solo pensiero :) <br/>
| |
| abilita uso del mouse - ''':set mouse=a''' <br/>
| |
| disabilita - ''':set mouse='''
| |
| | |
| | |
| == .vimrc ==
| |
| Il file di configurazione è una cosa molto personale, citando vimgor, il bot del canale IRC: <br/>
| |
| <skizzhg> vimgor, :kill_kittens <br/>
| |
| <vimgor> The Command that Cannot Be Named. :kill_kittens is what will happen if you use someone
| |
| else's vimrc.
| |
| | |
| Voglio però riportare alcuni stralci del mio, in particolare: <br/>
| |
| * la statusbar che fornisce molte informazioni sul documento
| |
| | |
| '''set laststatus=2''' <br/>
| |
| '''set statusline=(%n)\ %F\ [%{strlen(&fenc)?&fenc:'none'},%{&ff}]%h%m%r%y%=%c,%l/%L\ %P'''
| |
| | |
| (fonte: [http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that-own.html Vim statusline])
| |
| | |
| | |
| * la visualizzazione dei comandi parziali, se stiamo per digitare ZZ per chiudere Vim, verrà | |
| mostrata la prima Z, in caso ci fossimo sbagliati basterà usare Esc
| |
| | |
| '''set showcmd'''
| |
| | |
| | |
| * la gestione dei buffer, ci sono vari script più o meno comodi o invasivi, ho preferito creare delle semplici scorciatoie
| |
| | |
| questo è indispensabile per muoversi tra uno e l'altro senza doverlo prima salvare
| |
| | |
| '''set hidden'''
| |
| | |
| | |
| la mappatura dei tasti, <Leader> è il backslash <br/>
| |
| * L: elenca i buffer aperti e aspetta un numero per selezionarne uno
| |
| * l: li elenca soltanto
| |
| * b: passa al precedente
| |
| * f: passa al successivo
| |
| * g: alterna tra l'attuale e il precedente, stesso comportamento di ctrl-^
| |
| * D: rimuove un buffer dalla lista
| |
| * numeri: passaggio dal buffer 1 al 10
| |
| | |
| '''nnoremap <Leader>L :buffers<cr>:buffer<space> <br/>
| |
| '''nnoremap <Leader>l :ls<cr>''' <br/>
| |
| '''nnoremap <Leader>b :bp<cr>''' <br/>
| |
| '''nnoremap <Leader>f :bn<cr>''' <br/>
| |
| '''nnoremap <Leader>g :e#<cr>''' <br/>
| |
| '''nnoremap <Leader>D :bd<cr>''' <br/>
| |
| '''nnoremap <Leader>1 :1b<cr>''' <br/>
| |
| '''nnoremap <Leader>2 :2b<cr>''' <br/>
| |
| '''nnoremap <Leader>3 :3b<cr>''' <br/>
| |
| '''nnoremap <Leader>4 :4b<cr>''' <br/>
| |
| '''nnoremap <Leader>5 :5b<cr>''' <br/>
| |
| '''nnoremap <Leader>6 :6b<cr>''' <br/>
| |
| '''nnoremap <Leader>7 :7b<cr>''' <br/>
| |
| '''nnoremap <Leader>8 :8b<cr>''' <br/>
| |
| '''nnoremap <Leader>9 :9b<cr>''' <br/>
| |
| '''nnoremap <Leader>0 :10b<cr>'''
| |
| | |
| | |
| * per la creazione di file html usa la formattazione per mezzo di regole css al posto | |
| dei tag e attributi di formattazione pesanti e ormai deprecati <br/>
| |
| '''let html_number_lines=0''' <br/>
| |
| '''let html_use_css=1'''
| |
| | |
| | |
| == .vim/ ==
| |
| Normalmente il file di configurazione e quello della cronologia risiedono nella home, mentre tutti gli eventuali plugin e documentazione, schema colori e altro vanno nella directory <code>.vim/</code> con una struttura simile a <code>/usr/share/vim/vim72/</code>. <br/>
| |
| Per coerenza e ordine si farà in modo che i file <code>.viminfo</code> e <code>.vimrc</code> vengano spostati nella directory <code>.vim/</code> insieme a tutto il resto.
| |
| | |
| Per <code>.viminfo</code>, aggiungere la seguente riga in <code>.vimrc</code>:
| |
| <pre>
| |
| set viminfo='55,<55,s11,:99,h,n~/.vim/viminfo
| |
| </pre>
| |
| | |
| I parametri con le relative spiegazioni si trovano nell'help: <br/>
| |
| '''<nowiki>:</nowiki>h 'viminfo''''
| |
| | |
| Per .vimrc inserire la seguente variabile in bash_profile (o .profile):
| |
| <pre>
| |
| export VIMINIT="source $HOME/.vim/vimrc"
| |
| </pre>
| |
| Per ulteriori informazioni si veda: <br/>
| |
| '''<nowiki>:</nowiki>h VIMINIT'''
| |
| | |
| | |
| == Gerarchia della directory <code>.vim/</code> ==
| |
| <code>.vim/colors</code>: dove risiedono gli eventuali schemi colori aggiunti.
| |
| | |
| Visualizza lo schema in uso - ''':colorscheme'''
| |
| | |
| | |
| <code>.vim/doc</code>: la documentazione dei plugin.
| |
| | |
| Per far sì che Vim riconosca i cambiamenti, usare il comando: <br/>
| |
| '''<nowiki>:</nowiki>helptags <code>.vim/doc/</code>'''
| |
| | |
| Per ulteriori informazioni si veda: <br/>
| |
| '''<nowiki>:</nowiki>h :helptags'''
| |
| | |
| | |
| <code>.vim/plugin</code>: i plugin aggiunti
| |
| | |
| Per ulteriori informazioni si veda: <br/>
| |
| '''<nowiki>:</nowiki>h plugin'''
| |
| | |
| Visualizza tutti i plugin, temi e altro caricati - ''':scriptnames'''
| |
| | |
| | |
| <code>.vim/ftdetect</code>: dove ho inserito il menu di gvim, che è ampiamente customizzabile, per evitare che gli aggiornamenti sovrascrivano l'originale in <code>$VIMRUNTIME/menu.vim</code>; in realtà ftdetect servirebbe per la sintassi dei tipi di file ma pare l'unico modo per farglielo vedere.
| |
| | |
| Per ulteriori informazioni si veda: <br/>
| |
| '''<nowiki>:</nowiki>echo $VIMRUNTIME'''
| |
| '''<nowiki>:</nowiki>h ftdetect'''
| |
| '''<nowiki>:</nowiki>h menu.vim'''
| |
| | |
| | |
| <code>lessvim</code>: lo script che utilizza vim in modalità less e richiama <code>$VIMRUNTIME/macros/less.vim</code>. <br/>
| |
| Lo tengo in home per via di una lieve modifica (opzione -n) che evita di aprire un file <code>.swp</code> e mantenere quindi il file impegnato, un alias bash fa il resto: <br/>
| |
| <pre>
| |
| alias less='$HOME/.vim/lessvim'.
| |
| </pre>
| |
| Lo scopo è avere <code>less</code> con gli stessi vantaggi di Vim, sebbene in certe occasioni non funzioni a dovere, una volta dentro premere il tasto '''h''' per l'help.
| |
| | |
| La panoramica è ovviamente parziale e riguarda le mie modeste esigenze.
| |
| | |
| | |
| = Extra =
| |
| Ovviamente uso Vim anche per mutt, in questo modo componendo un nuovo messaggio mi troverò in
| |
| modalità inserimento, con il cursore sotto gli header dell'email e con la limitazione di 73
| |
| caratteri per riga.
| |
| <pre>
| |
| set editor="vim -f -c 'set tw=73' -c '/^$/' -c 'normal o' -c startinsert"
| |
| </pre>
| |
| | |
| apre Vim con limite di lettere per riga (73):
| |
| <pre>
| |
| $ vim -c 'set tw=73'
| |
| </pre>
| |
| apre file alla riga 5:
| |
| <pre>
| |
| $ vim +5 nome_file
| |
| </pre>
| |
| apre file alla riga 5 in insert mode:
| |
| <pre>
| |
| $ vim -c startinsert +5 nome_file
| |
| </pre>
| |
| apre file in insert mode sotto la riga 5:
| |
| <pre>
| |
| $ vim -c 'normal o' -c startinsert +5 nome_file
| |
| </pre>
| |
| dato un file di 8 righe, si posiziona sotto l'ultima creandone una nuova:
| |
| <pre>
| |
| $ vim +9 -c 'put_ | startinsert' nome_file
| |
| </pre>
| |
| apre file cercando la parola foobar:
| |
| <pre>
| |
| $ vim +/foobar nome_file
| |
| </pre>
| |
| apre file cercando corrispondenza della data corrente:
| |
| <pre>
| |
| $ vim +/$(date '+%b %e') nome_file
| |
| </pre>
| |
| cambia variabile lingua e cerca data in formato inglese:
| |
| <pre>
| |
| $ LANG=en_US; vim +/$(date '+%b %e') nome_file
| |
| </pre>
| |
| | |
| col cursore su un link apre sorgente html - '''ctrl-w ctrl-f'''
| |
| | |
| crea un file nuovo come dos invece che unix, permettendo una formattazione leggibile dal notepad di windows - ''':set ff=dos'''
| |
| | |
| crea un file nuovo con codifica iso-8859-1 - ''':set fenc=latin1'''
| |
| | |
| apre un file e ne converte la codifica in iso-8859-1 - ''':e ++enc=latin1'''
| |
| | |
| | |
| = Easter egg =
| |
| '''<nowiki>:</nowiki>h 42''' <br/>
| |
| '''<nowiki>:</nowiki>h!''' <br/>
| |
| '''<nowiki>:</nowiki>h holy-grail''' <br/>
| |
| | |
| | |
| = Riferimenti =
| |
| Vim ha un help interno strepitoso - ''':h help''' <br/>
| |
| Durante la consultazione si trovano dei collegamenti ad altri capitoli o pagine racchiusi tra due pipe, per seguirli posizionarvi sopra il cursore e premere '''ctrl-]'''
| |
| | |
| [http://www.vim.org/ Homepage] <br/>
| |
| [http://vim.wikia.com/wiki/Vim_Tips_Wiki Wiki] <br/>
| |
| [http://www.pluto.it/files/ildp/traduzioni/vimhelp-it/index72.html Help in italiano]
| |
|
| |
|
| <br/><br/> | | <br/><br/> |