Rivediamo meglio VIM

di
Andy Kahn
traduzione di
Leonardo Serni
Vim è il "VI migliorato", ed in effetti contiene grosse novità rispetto alla versione base di vi. Nell'articolo vengono alcune delle nuove (e anche qualcuna delle vecchie) caratteristiche che risultanto essenziali, oltrechè utilissime, in vim, ma non in vi.


 
Vim significa "VI migliorato", ed in effetti è sicuramente un grosso miglioramento rispetto al vecchio editor di testi, vi. E' passato qualche tempo da quando la Gazette ha pubblicato un articolo su vim (più di un anno, per essere esatti!), e da allora molte cose sono cambiate, fra le quali la versione principale rilasciata. Ho deciso di trattare alcune delle nuove (e anche qualcuna delle vecchie) caratteristiche che trovo utilissime in vim, ma non in vi.

Caratteristiche

Prima di tutto lasciatemi elencare alcune delle grosse modifiche nell'ultima versione di vim:
  • Syntax highlighting
  • Versione con interfaccia grafica per Win32
  • Versione per BeOS, inclusa interfaccia grafica
  • Versione con interfaccia grafica per MacOS
  • Versione per VMS
  • Linguaggio script incorporato
  • Supporto per Perl e Python
  • undo senza limiti
  • Finestre multiple
  • ...e una tonnellata di altra ottima roba.
  • Syntax highlighting

    Personalmente trovo che il syntax highlighting sia una delle caratteristiche più utili di vim. Questa evidenziatura (o colorazione, come qualcuno la chiamerebbe) colora il testo a seconda del suo significato. Quando si modifica del codice sorgente, ciò consente di avere colori diversi per i commenti, le parole chiave, i numeri, eccetera. Vi sembrerà non un granché, ma credetemi: dopo un po' che si guarda del codice sorgente, i caratteri cominciano a sembrare tutti uguali. E sicuramente è molto d'aiuto avere dei colori che differenzino il codice vero e proprio dai commenti, e così via. Ora, dato che una immagine vale mille parole, ecco uno screen-shot del mio vim mentre modifico una sezione del file main.c del sorgente di vim stesso:

    Potete notare la curiosa stringa nella primissima riga:"vi:set ts=8 sts=4 sw=4:". Questa è una abbreviazione di formattazione. Se scrivete codice che qualcun altro potrebbe leggere o modificare, e se questi usano anch'essi vim, allora il codice verrà automaticamente indentato come volevate voi! Questo sistema è analogo alle stringhe magiche usate in EMACS: "-*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-" per fare sì che le indentature siano consistenti fra più macchine.

    Interfacce grafiche

    Per quanto riguarda le varie fantastiche versioni GUI di vim, questa è una schermata che ho trovato su
    http://polder.ubc.kun.nl/~rhialto/be/vim-5.0s-screen1.gif che mostra la versione BeOS:

    Questo è un grosso screen shot della versione Unix di vim con quattro diversi looks (vim in uno xterm, vim usando Athena, vim usando Athena con Xaw3d per il look tridimensionale, e vim usando Motif (per gli utenti Linux: sì, vim funziona anche con Lesstif)). Cliccate sull'immagine per la versione a grandezza naturale:

    Ci sono molti altri screen shots qui.

    Built-in Scripting

    Il linguaggio script incorporato è un piccolo linguaggio (in confronto a Perl o a Python) che consente di fare alcune operazioni nel file di startup di vim (.exrc o meglio .vimrc). Per esempio, la cosa più semplice consiste nel verificare una versione o una feature:
        if version >= 500
        "   Attivare syntax highlighting.
            syntax on
    
            if has("cscope")
                set csexec=/usr/local/bin/cscope
                set csto=0
                set csta=1
                set csverb=0
                cs add cscope.out
                set csverb=1
            else
                map ^] g^]
            endif
        endif

    Selezione visuale del testo

    Una caratteristica presente anche nella precedente versione di vim, che uso spesso, è la capacità "Visuale". Premendo v in modo comandi, si possono evidenziare linee e parole e poi eseguire quasi qualsiasi normale comando vim sul testo selezionato! Questo comprende cancellare, copiare, incollare, lanciare comandi ":ex", e il mio favorito - reindentare. Per esempio, diciamo che io abbia evidenziato il testo seguente:

    Se premo > (segno di maggiore), il risultato sarà questo:

    O se premessi < (segno di minore), otterrei:

    Se davvero volessi potrei evidenziare l'intera funzione e farla passare attraverso il programma indent:

    Prima:
    Dopo:
     
     

    tags C e C++

    Un'altra caratteristica che i programmatori troveranno comoda è la capacità di vim di maneggiare tag (etichette segnalibri) multiple. Vim è fornito con "Exhuberant Ctags", e con queste è possibile mantenere più definizioni nello stesso file di tags. Una volta in vim si può usare ":tselect" o ":tjump" su una tag, e vim mostrerà una lista delle voci multiple. Selezionatene una dalla lista, e vim vi ci porterà sopra con la stessa facilità con cui lo avrebbe fatto se fosse stata una tag singola!

    C'è dell'altro!

    Naturalmente potrei andare avanti parecchio su tutte le piccole (e grandi!) cose che rendono vim un editor così notevole. Ma non vi annoierò con i dettagli. Potete leggerli per conto vostro sulla home page di vim: www.vim.org.  Ci sono moltissime novità che vengono elaborate ed aggiunte continuamente, comprese ulteriori prestazioni nelle varie versioni GUI (ehi, contattatemi se siete interessati in una versione GTK e/o QT!), portings su altre piattaforme, compreso l'Amiga, e altre cosine interessanti.

    Là fuori c'è sicuramente una grande quantità di editors; ma se siete un utente vi, dovete assolutamente considerare la possibilità di usare vim, se già non lo state facendo.


    Andy lavora alla Digital Equipment Corporation (DEC) allo sviluppo del kernel per file systems Digital Unix. Lui pensa di stare semplicemente menando colpi d'accetta a quantità sempre maggiori di codice C e, nel suo considerevole tempo libero, accetta anche molte altre cose, come tutti gli alberi del vicinato o le vostre e-mail.
    Per l'articolo originale: © 1998 Andy Kahn
    Pubblicato sul n. 29- Giugno 1998 di Linux Gazette
    Per l'edizione italiana: © 1998 LGEI