Vim – un editor di testo per tutti - AlessandroCumin · In Vim un paragrafo è una porzione di...

21
Vim – un editor di testo per tutti Caratteristiche e uso pratico

Transcript of Vim – un editor di testo per tutti - AlessandroCumin · In Vim un paragrafo è una porzione di...

Vim – un editor di testo per tutti

Caratteristiche e uso pratico

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