Ricerca tra la vecchia roba

Vim

Posted: Dicembre 10th, 2007 | Author: | Filed under: Guide, Programmazione | 1 Comment »

Vi Vi Vi the editor of the beast

Nel 1976 nasce per mano di Bill Joy quello che diventerà l’editor per eccellenza degli hacker negli anni a venire, il mitico Vi: nome derivato dalle iniziali del comando visual prende vita dall’editor ex, editor ancora precedente a sua volta derivato da ed

Prima di tutto bisogna comprendere che non si ha di fronte un editor comune, ma un editor che ha una eredità (pesante) derivante dai vecchi sistemi: esitono tre modalità principali in cui questo programma può operare

  • Comandi
  • Visuale
  • Inserimento/Sostituzione

ognuna di queste ha una propria missione da compiere e il suo preciso scopo per operare, benché condividano delle funzionalità in comune.

Inserimento

 È la modalità che più si avvicina ad un normale editor: alla base del terminale è presente la scritta "— INSERISCI —" che indica all’utente che si può procedere all’inserimento del testo desiderato; alternativo a questa modalità è la sostituzione (troverete il termine "— SOSTITUISCI —" alla base del terminale) che si ottiene dalla modalità di inserimento una volta premuto il tasto [Ins]. Ma non abbiamo ancora detto come si attiva questa modalità e perciò ecco l’elenco

i – attiva la modalità inserimento nel punto in cui è il cursore
I – attiva la modalità inserimento  portando il cursore ad inizio linea
a – attiva la modalità inserimento nel carattere dopo il cursore
A – attiva la modalità inserimento a fine linea
o – crea una riga vuota (superiormente alla posizione del cursore [W l’italiano]) e attiva la modalità inserimento
O – come il precedente ma la riga è quella superiore
ea – inizia la modalità di inserimento alla fine della parola su cui è il cursore

Visuale

In linea di massima questa modalità sostituisce il possibile utilizzo del mouse nell’evidenziare zone di testo su cui eventualmente effettuare delle operazioni; le varie possibilità per attivarlo sono

v – attiva la modalità visuale
V – attiva la modalità visuale a linee
[Esc] – disattiva la modalità

 a cui vanno aggiunte particolari combinazioni da richiamare per comuni parti di testo

aw – marca una parola
ab – marca il contenuto fra parentesi tonde (comprese le parentesi)
aB – marca il contenuto fra parentesi graffe (comprese le parentesi)
ib – marca il contenuto interno fra tonde (i = inner)
iB – marca il contenuto interno fra graffe
U – cambia in uppercase il testo evidenziato

Comandi 

PARTE DA COMPLETARE, STAY TUNED….

Andiamo in giro

 Una delle cose più utili in Vim è la possibilità di poter cercare occorrenze di determinati caratteri, parole, funzioni etc…

  • gd – porta  nel punto in cui è definita la variabile locale su cui siete con il cursore
  • % – se sopra una parentesi vi porta dalla sua compagna
  • * – porta alla prossima occorrenza della parola su cui siete
  • # – come prima, ma alla occorrenza precedente
  • – ritorna da dove si era partiti per la ricerca

oltre che eventualmente effettuare delle operazioni tramite essi

  • gf – apre il file il cui nome si trova sotto il cursore
  • ga – mostra il valore esadecimale, ottale e ascii del carattere sotto il cursore

Poi ovviamente internamente ha un potente motore di regular expression che differisce leggermente da quello standard

.     qualunque carattere
s    spazio
d    cifra
x    cifra esadecimale
o    cifra ottale
p    carattere stampabile
w    word character
a    alphabetic character
l    lowercase character
u    uppercase character

le corrispondenti  versioni maiuscole indicano il complementare

È possibile evidenziare i valori ottenuti con la ricerca tramite :set hlsearch (o de-impostarlo tramite :set nohlsearch

Editiamo

Cosa sarebbe un editor senza la possibilità di editare?  

  • ‘. – Salta all’ultima riga modificata
  • `. – Salta nell’esatto punto della modifica
  • g; – Cicla attraverso i cambi avvenuti di recente
  • g, – Come prima ma in ordine inverso
  • :changes – Mostra la lista dei cambiamenti

Impostazioni

Esistono un gran numero di grandezze interne che regolano il comportamento di Vim durante l’editing dei file, dalla possibilità di mostrare i caratteri speciali, del numero di spazi corrispondenti al <Tab> etc

  • shiftwidth
  • wrapmargin
  • list – mostra i caratteri invisibili nel file
  • expandtab

tutte queste sono impostabili tramite il comando nella forma :set <variabile>=<valore> e deimpostabili tramite la forma :set no<variabile>.

Tab

Mica penserete che solo firefox possiede i cosidetti Tab? anche quella brutta bestia di Vim possiede (da non molto a dire la verità) di questa funzionalità che permette di adoperare più finestre contemporaneamente, però al contrario dei comandi ~split qui possiamo avere le finestre in tutta la loro larghezza. Una volta all’interno dell’editor è sufficiente dare il comando :tabnew per ottenere una nuova finestra, in aggiunta, ovviamente a quella già presente; notare la prima riga che tramite una interfaccia penso generata con le Ncurses, simula un tab

 vim ed i tab.

Nel caso in cui si vogliano aprire direttamente all’avvio più file, usando un tab per ognuno, è di usare l’opzione -p.

Ovviamente non ci si ferma qui, è possibile spostarsi tra i tab o con il comando :tabNext oppure con un semplice Ctrl-PgUp, Ctrl-PgDown, proprio come i Tab del terminale di Gnome (questo risulta un problema in quanto la combinazione di tasti viene grabbata dal terminale e quindi non potete usarla in vim); non ultima la combinazione gt o gT. È possibile spostare fisicamente i tabs tramite :tabmove ed indicando un numero che indica la posizione dopo la quale lo si intende posizionare; indicando 0 lo si posiziona al primo posto, senza indicare un numero lo si posiziona come ultimo.

È possibile eseguire comandi di ricerca/sostituzione stringhe in ogni tab eseguendo :tabdo <cmd>; nel caso avvenga un errore in uno dei tab il processo si ferma.

È disponibile un elenco dei tab tramite comano :tabs.

Programmare

 Questo editor sembra scarno a prima vista, ma per un programmatore può essere fondamentale a causa della sua leggerezza e delle sua flessibilità: 

Si può richiamare direttamente il programma per gestire la compilazione (o qual’altra azione volete intraprendere sul vostro codice) tramite

:make

che richiama di default proprio il programma make  tuttavia è possibile poter impostare un qualsiasia altro programma tramite la variabile makeprg; siccome spesso l’azione da eseguire non va a buon fine, è utile poter localizzare l’output di errore e riindirizzare l’editor nostro amato sulla linea maligna e per questo esiste la variabile errorformat, che nel caso di gcc è nella forma %f:%l:%m ma voi evidentemente potete settarla come vi aggrada (vedi :h errorformat). Molto utile è la possibilità di fargli salvare in automatico tutti i buffer modificati prima di avviare la compilazione attraverso l’opzione autowrite. Inoltre è possibile effettuare queste operazioni (ce ne sono altre) con la lista di errori

  • :cn va al prossio errore
  • :cp va al precedente
  • :cl elenca gli errori
  • :cc[!] [numero] salta al’errore numero e se questo è omesso, ripete l’ultimo errore (il punto esclamativo dovrebbe non farti saltare di buffer, o almeno penso)

Esistono poi tutta una serie di funzionalità legate ai singoli linguaggi di programmazione quali il C: insieme a Vim si ha di solito abbinato un bel programmino chiamato ctags che prende come argomento dei file e restituisce un file tags in cui sono inserite 

macro definite tramite #define

definizioni di funzioni,
prototipi, and dichiarazioni
classi, enum, struct, e union
namespaces

typedefs

variabili
(definizioni and dichiarazioni)

membri di classi, structs, e unions

L’utilità consta nel fatto che una volta prodotto questo file potete aprire direttamente il file dove è definita una tra le grandezze appena elencata tramite vim -t quello_che_vuoi, oppure, una volta dentro l’editor basta posizionarsi su una variabile, su una funzione e poi premere Ctrl – ] per essere spediti direttamente sulla sua definizione (basta premere Ctrl -t per tornare al punto di partenza). Nel caso si voglia cercare una definizione non sotto mano basta dare :ta quell_che_vuoi.

  • :ts[elect][!] [ident] Visualizza tutte corrispondono a ident 
  • :sts[elect][!] [ident] Visualizza tutte corrispondono a ident ma splitta in una nuova finestra

Un’altra funzionalità molto utile è la possibilità di richiamare le pagine di manuale direttamente usando in modalità comando il tasto "K" che richiama quanto contenuto nella variabile keywordprg (o la sua abbreviata kp); di default è impostato con "man". Cioé in questo caso mostra la pagina di manuale relativamente alla parola su cui si è con il cursore (è possibile selezionare la sezione della pagina di manuale premendo prima il numero della sezione).

Modeline

Esiste la possibilità di impostare in automatico certe variabili all’apertura di un file tramite la modeline: ponendo nelle prime o nelle ultime 5 righe una istruzione del tipo

[text]{white}{vi:|vim:|ex:}[white]{options}

[text]       qualunque testo o anche niente
{white}     almeno un carattere "bianco" (<Spazio> o <Tab>)
[white]     spazio bianco opzionale
{options} lista di impostazioni separate con spazi bianchi oppure dal carattere ‘:’; ognuna delle parti separate con ‘:’
                   deve essere l’argomento di un comando set.

Questo è particolamente utile nel caso editiate file in progetti non vostri che usano delle impostazioni negli spazi, i tab e indentazioni non standard; per esempio per fare in maniera che un file venga aperto con uno shiftwidth pari a 4 quando voi in realtà lo usate  con un valore pari ad 8 ponete la riga

/* vi: shiftwidth=4: */

entro le prime 5 righe del file o nelle ultime 5.

Siccome questa feature ha delle problematiche di sicurezza, gli utenti Debian devono commentare nel file /usr/share/vimcurrent/debian.vim la riga set nomodeline.

Curiosità

 Il fatto che vengano usate le lettere hjkl per i movimenti del cursore derivano dal fatto che il programma originariamente fu sviluppato su un terminale  Lear-Siegler ADM3A  avente il seguente schema di tastiera

 

terminale su cui è stato sviluppato Vi.

e come potete notare sono presenti delle frecce sui suddetti tasti.

 Linkografia


One Comment on “Vim”

  1. 1 AndrE said at 11:53 am on Dicembre 11th, 2007:

    Un post da incorniciare!
    W vi