Introduzione
● StoriaNasce come evoluzione di Vi, già a sua volta evoluzione di Ed, editor nato per essere usato su terminali “stupidi”, usando minime risorse di sistema ma garantendo comunque buone prestazioni e funzionalità complete.E' nato da programamtori per programmatoriVi, usato su praticamente tutte le versioni di UNIX, è nato come editor di linea e si chiamava originariamente ex. E' stato sviluppato all'Università di Berkley, California da William Joy. In origine era un'applicazione distribuita senza supporto fino alla sua introduzione in Unix System V della At & T. Da allora in poi è diventato sempre più popolare nonostante le sfide di editor più potenti ed a tutto schermo.
Vim, la versione attuale di Vi, è un'estensione migliorata ed ampliata; del suo genitore mantiene molte caratteristiche di base. E' opera di Bram Moolenar
Vim - introduzione
● Caratteristiche principali● undo/redo multilivello● Sintassi colorata per centinaia di linguaggi e files di sistema
● Editing su più finestre in una sola console
● Completamento automatico delle parole e dei comandi
● Completamente programmabile e configurabile
● Help in linea completo e dettagliato● Supporto compilazione programmi in
moltissimi linguaggi● Salvataggio dello stato di editing● History dei comandi basato sui primi caratteri inseriti
● Comandi personalizzati secondo il tipo di file
● Formattazione automatica del testo ● Multipiattaforma● Creazione automatica del file di backup
Vista l'enorme quantità di comandi ed opzioni è difficile trovare un ordine logico generale, quindi ho scelto un percorso in cui mi sono trovato bene
Vim - le basi
● ConfigurazioneFornito con tutte le distribuzioni, parte
in modalità compatibile Vi, perdendo molte possibilità e caratteristiche
Perché si avvii in modalità completa è necessario aggiungere nella propria home directory il file .vimrc con il comando
touch ~/.vimrcE' possibile usare Vim in modalità
completa comunque usando il comando
:set nocompatible
● AvvioE' possibile avviarlo con vim, che lo
avvia all'interno della command window oppure con gvim che lo avvia nella propria finestra
~ indica le linee vuote non ancora scritte in un file. In basso è presente una message line
● ModalitàVim è modale nel senso che ha un
comportamento diverso a seconda del
modo in cui ci si trova. Se sotto nella message line non compare nulla siamo in modo normale o modo comando, in
modo inserimento nella message line appare insert mode, in modo visuale nella message line appare visual
Visto il numero dei comandi, nel modo normale praticamente ogni tasto ha una sua funzione
● Inserimento testoPer poter inserire del testo ci si deve
portare in insert mode, il modo più facile è premere
i - insert mode e poi digitare, in basso sulla message line comparirà INSERT
Vim – comandi fondamentali
● Inserimentoi – porta in insert mode al primo
carattere non vuoto della lineagi – porta in insert mode all'inizio della
lineaR – porta in replace mode, una modalità
di inserimento in cui i caratteri vengono sovrascritti
Nota: Vim non va normalmente a capo in modo automatico, va fatto con il tasto invio o configurato in modo da farlo automaticamente
● Movimento (modo normale o comando)
h – a sinistra di un caratterel – a destra di un caratterej – in basso di un caratterek – in alto di un carattere
Nota: ci si può muovere anche con i tasti freccia
come quasi tutti i comandi, possono
● Cancellazione testox – cancella il carattere sotto al cursoreX – cancella il carattere a sinistra del
cursore
● UscitaZZ – esce salvando il fileq! - esce abbandonando le modifiche
effettuate
Nota: ! (punto esclamativo) è usato come rafforzativo di un comando, per far ignorare a Vim eventuali controindicazioni all'uso, come per esempio nel caso di q, di non aver salvato il file.
essere preceduti da un numero per farlo ripetere
Vim – Ulteriori comandi
● Inserimento testoa (append) permette l'inserimento di
testo dopo il cursoreA permette l'inserimento del testo alla
fine della rigao aggiunge una linea vuota sotto al
cursore, ve lo porta ed attiva la modalità di inserimento
O aggiunge una linea vuota sopra al cursore, ve lo porta e attiva la modalità di inserimento
● Comandi dati in modo comandoVim ha una vasta serie di comandi
attivabili da tastiera in modalità normale, preceduti da : (due punti)
:set number attiva la numerazione automatica delle linee (non compare nelle stampe ed è utile per sapere dove ci si trova - ad esempio nella programmazione)
:set nonumber disattiva la numerazione automatica delle linee
:set autowrite attiva il salvataggio automatico del file – permette di non ricevere messaggi di file non salvato all'uscita (molto pericolosa perché se si decide uscire senza salvare in caso di errore, gli errori vengono salvati)
:set noautowrite disattiva il salvataggio automatico
● Altri comandi di movimentow si sposta avanti di una parolae si sposta alla fine di una parolab si sposta indietro di una parolage si sposta alla fine di una parola ma
all'indietro$ (tasto fine) si sposta alla fine della
linea^ si sposta sul primo carattere non
vuoto della lineaH (home – 0) si sposta sul primo
carattere della linea
Vim – editing più rapido
● Cancellazione più rapidaPoiché come detto i vari comandi sono
ripetibili e combinabili fra di loro è possibile eseguire certe operazioni in modo più rapido
drange cancella il range specificato(Es. dw cancella una parola)dd cancella l'intera linea (Es. 5dd
cancella 5 linee) D cancella dal cursore fino al termine
della linea● Undo e redo
Vim supporta sia l'undo (ripristino) che il redo (recupero da un ripristino) multiplo, cioè mantiene varie digitazioni
u recupera la digitazione precedente
Ctrl-r recupera la digitazione precedente l'undo
(entrambi supportano la ripetizione numerica)
● Movimento più rapidofchr si posiziona sul primo chr che
incontraFchr si posiziona sul primo chr che
incontra ma a sinistratchr si posiziona subito prima di chrTchr si posiziona subito prima di chr
ma a sinistragg si porta alla prima lineaG si porta all'ultima lineanumgg si porta alla linea numnumG si porta alla linea num; (punto e virgola) ripete l'ultimo
comando di tipo f,F,g,G
Vim – Help (aiuto in linea)
● ParagrafiIn Vim un paragrafo è una porzione di
testo separata da due linee vuote{ si porta ad inizio paragrafo} si porta a fine paragrafo
Nella programmazione può tornarne utile l'uso come range di esecuzione dei comandi
● Help in lineaVim ha uno splendido help in linea,
completo, navigabile con gli stessi comandi dell'editor, anche per l'uscita, supporta anche gli hyperlink, che per Vim sono dei veri e propri tag
:help (F1) attiva l'help in linea di vim:helpcomando fornisce informazioni
sul comando (per i comandi preceduti da Ctrl lo si deve prefissare al comando)
Per i comandi specifici di una determinata modalità si usano i prefissi seguenti
nulla per la modalità normale :help xi_ per modalità inserimento :help
i_Escv_ per modalità visuale :_ modo comandoc_ modo commmand_line-_ comandi linea comando :help -r' ' per le opzioni :help
'textwidth'
● Informazioni ulterioriVi sono altri comadi che forniscono
ulteriori informazioni.
Ctrl-g mostra nella status line informazioni sul file, lo stato, la posizione in cui ci si trova
gCtrl-g mostra informazioni specifiche sulla posizione nel file
1Ctrl-g mostra il percorso completo del file
Vim -scrolling avanzato
● ScrollingVim, per rendere più veloci i movimenti
supporta vari comandi per lo scrolling
Ctrl-e scrolla di una linea verso il bassoCtrl-y scrolla una line verso l'altoCtrl-u scrolla di mezza pagina in suCtrl-d scrolal di mezza pagina in giùCtrl-b scrolla di una pagina intera in suCtrl-f scrolla di una pagina intera in giù
:set scroll=num imposta di quante linee deve essere fatto lo scrolling
L si porta all'ultima linea della schermata
z<invio> linea attuale diviene la prima della finestra (cursore ad inizio linea)
zt<invio> linea attuale il cursore diviene la prima della finestra (cursore mantiene la posizione attuale)
z.<invio> la linea attuale si porta a metà schermata (cursore ad inizio linea)
zz<invio> la linea attuale passa al centro della finestra (cursore mantiene la posizione attuale)
z-<invio> la linea attuale passa alla fine della finestra
zb<invio> la linea attuale passa alla fine della finestra (cursore mantiene l aposizione attuale)
● Opzioni di avvioOltre al nome del file, sulla linea di
comando di Vim è possibile secificare dei comandi con l'opzione +.
vim nomefile +comando
Es. vim pippo +/Tasso attiverà Vim alla prima linea del file Pippo che contiene la parola Tasso
Vim – altre funzionalità avanzate
● Sostituzione del testoVim ha anche delle potenti funzioni per
la sostituzione di parti di testocrange cancella il range, portandosi in
modalità inserimentoEs. cw cancella una parola e
porta in modalità inserimento. (punto) esegue l'ultimo comando di
modifica o cancellazione – grazie alla ripetizione numerica risulta comodo per ripetere una modifica su più porzioni di testo
rx sostituisce il carattere sotto al cursore con x
~ inverte il carattere sotto al cursore da minuscolo a maiuscolo e viceversa
● Unione di lineeJ unisce una linea con la successiva
aggiungendo uno spazio per separarle
● MacroVim permette la registrazione di comandi più complessi di quelli ripetibili con il comando .
qchr fa partire la registrazione della macro chr q termina la registrazione@chr esegue la macro chr, chr può essere qualsisasi lettera
● DigraphsVim permette l'inserimento di caratteri
particolari non presenti sulla tastiera (es. ©). Questo inserimento si ottiene con
Ctrl-kcoppia_char
:digraphs visualizza una tabella con i caratteri inseribili e la coppia di tasti corrispondente
Vim – ricerche nel testo
● Ricerca semplice/stringa ricerca la prima occorrenza di
stringan porta all'occorrenza successiva
(ripete l'utimo comando di ricerca)N inverte il verso della ricerca? esegue la ricerca all'indietro
Nota: per cercare i caratteri speciali .*[]^%/\?~$ bisogna farli precedere da \
● HistoryVim supporta anche l'history delle
ricerche effettuate/ + freccia su e freccia giù scorre
l'history delle ricerche
● Marcatura bersagliE' possibile marcare tutte le occorrenze
di stringa:set hlsearch attiva la marcatura:set nohlsearch disattiva la marcatura
● Ricerca incrementaleVim è in grado di attivare la ricerca già
dal primo carattere digitato, man mano che se ne inseriscono altri la ricerca si affia
:set incsearch attiva la ricerca incrementale
:set noincseach disattiva la ricerca incrementale
● Sensibilità alle maiuscoleDi default Vim è sensibile ai caratteri
maiuscoli, per cui include e Include sono considerate parole diverse
:set ignorecase disabilita la sensibilità alle maiuscole
:set noignorecase abilita la sensibilità alle maiuscole
:set wrapscan abilita la ricerca dall'inizio una volta giunto alla fine del file
:set nowrapscan la disabilita
Vim – ancora sulla ricerca
* ricerca la parola sotto al cursore in avanti
# ricerca la parola sotto al cursore indietro
● Accenni sulle espressioni regolari
Vim possiede un potentissimo metodo di ricerca basato sulle espressioni regolari,
sistema difficile da padroneggiare che però permette una versatilità pressoché illimitata
^ (inizio riga) premettendo questo carattere vengono trovate solo le occorrenze ad inizio riga
$ (fine riga) premettendo questo carattere vengono trovate solo le occorrenze alla fine della riga
Nota: combinandole vengono trovate solo le linee composte dalla stringa voluta
. (punto) questo carattere è un po' il jolly e può sostituire qualsiasi carattere
● Sostituzione del testoE' possibile sostituire il testo cercato
tramite il comando substitute
:range s/str1/str2/ sotituisce str1 con str2 nel range, fermandosi alla prima occorrenza
:range s/str1/str2/g sostituisce str1 con str2 nel range globalmente
:range s/str1/str2/c posponendo il flag c viene richiesta la conferma prima delle sostituzioni
Vim – taglia copia incolla
A differenza di molti altri editor che supportano una sola clipboard per le operazioni di cut & paste, Vim possiede più di 26 buffer per copie multiple e permette la selezione di testi lunghi in blocchi per condurre tali operazioni in modo più mirato, semplice e conciso. Permette l'editing di pù file contemporaneamente.
Ogni qual volta siesegue un comando di cancellazione come d o x, il testo cancellato viene salvato ed è incollabile con il comando
p inserisce il testo dopo il cursoreP inserisce il testo prima del cursore
La copia si esegue con il comando yank.
yrange copia nel buffer predefinito (lavora come d, senza cancellare il testo)
yy copia nel buffer la linea correntey'lettera copia fino al mark letteraY copia una singola linea
(preceduto da num copia num linee)
● Registri specialicome già visto, Vim possiede dei
registri speciali: i numeri da 1 a 9 contengono le linee cancellate con dd, il registro 1 l'ultima e così via.
_ (blackhole) è un registro particolare, chiamato così perché ha una funzione simile a al /dev/null UNIX.
Può tornare utile per esempio se si vogliono cancellare linee senza alterare il contenuto dei registri predefiniti
_dd cancella una linea senza memorizzarne il contenuto nel registro predefinito
● Ancora sul pastinggp inserisce il testo dopo il cursore
(cursore dopo testo incollato)gP inserisce il testo prima del cursre
(cursore dopo testo incollato)Nota: xp scambia di posto due
caratteri
Vim – marcatori e “filtraggio”
● Marks (segnalibri)
mlet_min imposta il segnalibro`let_min (apice inverso) si posiziona sul
segnalibro'let_min si posiziona sul sulla linea del
segnalibro
Sono comodi per cancellare più righe di testo in un file. Il segnalibro inoltre rimane anche muovendo il testo, sparisce solamente cancellando il testo
:marks visualizza i segnalibri usati e le loro posizioni
:marksarg visualizza un segnalibro specifico
● FiltraggioVim supporta la sostituzione di blocchi
di testo con l'output di un comando, sfruttando stdin, stdout, pipe, redirezione. Il comando usato è ! (punto esclamativo)
!rangeCommand<Enter> sostituisce la parte di testo specificata dal range, con l'output del comando Command
Es. !10Gsort<Enter> riordina
sostituendo le prime 10 linee (se ci si trova ad inizio file
!! esegue il comando sulla linea corrente
!!ls inserisce la lista dei files della dir corrente
!!date inserisce il timestamp
Vim – Editing multiplo
● Editazione contemporanea di più di un file
Una delle peculiarità di Vim è la sua capacità di editare più files contemporaneamente. Il modo più immediato per attivarla consiste nello specificarli sulla linea di comando all'avvio di Vim
:next passa all'editazione del file successivo
:wnext passa all'editazione del file successivo memorizzando quello attuale
:previous passa all'editazione del file precedente
:wprevious passa all'editazione del file precedente memorizzando quello attuale
:rewind passa all'editazione del primo file:last passa all'editazione dell'ultimo
file
● Split delle finestre
Un'altra notevole capacità di Vim è il supporto
delle finestre multiple
:split suddivide la finestra permettendo di editare parti diverse dello stesso file
:split file suddivide la finestra permettendo di editare file
:n split determina una finestra di n linee :new suddivide la finestra con un nuovo
file vuoto:sview file suddivide la finestra mostrando
un file in sola lettura:vsp file splitta lo schermo in verticale
mostrando file
Vim – editazione multi finestra
● Muoversi nelle finestre multiple
Ctrl-w sposta il cursore da una finestra all'altra
Ctrl-wj sposta il cursore nella finestra in basso
Ctrl-wk sposta il cursore nella finestra in alto
:q zz Ctrl-wc chiudono una finestra, con il postfisso all si applicano a tutte le finestre
● Modifica delle finestre
Ctrl-w n+ incrementa la dimensione della finestra di n linee
Ctrl-w n- decrementa la dimensione della finestra di n linee
Ctrl-w = porta tutte le finestre alla stessa dimensione
nCtrl-w_ porta la finestra a n linee, se non specificato la massimizza
Ctrl-wr ruota le finestre verso il bassoCtrl-wR ruota le finestre verso l'alto
● ShellUn'altra notevole funzione dell'editor è
quella di poter passare ad un prompt di shell senza bisogno di uscirvi
:shell attiva un prompt della shell:exit esce dalla shell
Vim – modalità visuale
● Modalità visualeE' la modalità di vim sicuramente più
interessante perché permette di visualizzare le selezioni, che si possono fare anche tramite mouse, in modo da avere sott'occhio il blocco di testo su cui andranno ad operare i vari comandi
v attiva la modalità visualeV attiva la modalità visuale a linee
intereCtrl-v attiva la modalità visuale
rettangolare
y porta i caratteri selezionati nel bufferY porta le linee selezionate nel bufferc cancella i caratteri selezionati
portando in insert modeC cancella le righe selezionate portando
in insert modeJ unisce le linee selezionate come nella
modalità classica aggiungendo lo spaziogJ unisce le linee senza l'aggiunta di
spazi
K seleziona la parola in modo visuale
Uscita: per uscire dalla modalità visuale basta un comando visuale, come d per la cancellazione, oppure si usa il solito <Esc>
● Modalità visuale rettangolareE' anch'essa una modalità molto
interessante e molto utile soprattutto a chi usa l'editor di testi per la programmazione, in quanto permette la selezione di alcune parti di linea però su più linee
In questa particolare modalità i comandi funzionano in modo leggermetne diverso
Istringa <Esc> inserisce stringa in tutte le linee del blocco alla sinistra del blocco stesso
cstringa <Esc> cancella il blocco e stringa viene inserita in ogni linea
Cstringa <Esc> cancella dal lato del blocco fino a fine linea e inserisce la stringa
Vim – funzionalità da wordprocessor
Astringa porta in insert mode aggingendo la stringa
rx sostituisce i caratteri selezionati con x
● Funzioni di editing
:set textwidth=number imposta la lunghezza della linea, creando l'accapo automatico
:set textwidth=0 disabilita l'accapo automatico
:set wrapmargin=number imposta il margine destro
Nota: l'opzione :set textwidth ha la precedenza su
:set wrapmargin, di default Vim non separa le parole
:range center width centra una porzione di testo
:range right num alliena a destra:range left num allinea a sinistra
● Formato di salvataggio
:set fileformat=formatopermette di scegliere quale formato usare per il salvataggio (dos, unix, mac)
Vim – funzionalità da wordprocessor
● Abbreviazioni
:abbreviate xx abbreviazione sostituisce la coppia di caratteri xx con la stringa abbreviazione
:abbreviate genera la lista delle abbreviazioni
● Salvataggio impostazioni
:mkvimrc file salva le impostazioni su file:source file recupera le impostazioni
● Criptaggio
Vim offre anche la possibilità di criptare un documento, aprendolo con l'opzione -x che richiede l'inserimento di una password
:set key= disattiva la criptazione:set key=pswd attiva la criptazione con
password pswd
● Backup
:set backup attiva la creazione automatica della copia di backup con l'estensione standard per i file
temporanei ~:set backup=string attiva la copia di
backup con l'estensione string
● Ausilii alla programmazione
:syntax on attiva il riconoscimento automatico della sintassi
:syntax off disattiva il riconoscimento automatico della sintassi
:set filetype=c applica al file il riconoscimento della sintassi per il linguaggio c
Vim – altre funzionalità avanzate
:ascii (ga) visualizza il codice decimale, esadecimale ed ottale del chr sotto alcursore
:goto offset permette di posizionare il cursore su uno specifico byte del file
Ctrl-a incrementa di uno il numero sotto al cursore
nCtrl-a incrementa di n il numero sotto al cursore
Ctrl-x decrementa di uno il numero sotto al cursore
nCtrl-x decrementa di n il numero sotto al cursore
Vim – altri ausili alla programmazione
Altre funzionalità
● ricerca automatica nei file standard● indentazione automatica a seconda del
linguaggio● ricerca della definizione delle variabili● ricerca della definizione delle
macroRicerca automatica parentesi aperte e chiuse relative
● shift di un intero blocco di testo racchiuso tra parentesi
● ricerca delle pagine di man in funzione del numero di pagina
● espansione del tab in spazi● esecuzione del make, compilazione e
visualizzazione degli errori dall'interno di vim
● Finesetra personalizzata (Gui)E' possibile avviare Vim con una sua
finestra che presenta le classiche icone autoesplicative presenti nella maggior parte dei programmi con interfaccia grafica
gvim
● Bibliografia
➢ Vimbook-OPL Steve Oualline➢ Quick Reference Karanjit S. Siyan➢ Appunti di informatica libera D. Giacomini➢ Sopravvivere con ViLinux pro