Vim the editor of the beast (cit. packz), for php programmers (part 1)

Vim è un editor di testi super performante, modale ed altamente configurabile. certo iniziare non è semplice, ma dopo ti accorgerai di non poterne fare a meno

Ho già lasciato intendere nell'abstract quale sia il mio pensiero riguardo a vim.

Ma non è di questo che voglio parlare qui.

Quello che fa la differenza utilizzando questo editor, è la velocità che si raggiunge nello sviluppo, nella navigazione attraverso il file, nella ricerca di testo, nel trova e sostituisci etc..., una volta che si acquista familiarità con i comandi base.

Di comandi ce ne sono un'infinità ed io dopo anni di utilizzo devo ammettere che ne uso abitualmente una piccola parte.

Ma quello che può dare un'ulteriore marcia in più, e migliorare notevolmente la qualità e velocità dello sviluppo è la possibilità di estendere l'editor con una serie di plugin ad hoc per la nostra situazione.

Vim for php programmers

Riassumo qui una serie di figherie che possono essere aggiunte a vim in modo da renderlo un perfetto editor php, che nulla ha da invidiare ad eclipse o altri, anzi...

Gran parte di quello che scriverò arriva da qui e da qui, quindi vi invito a leggervi gli originali, io cerco solamente di mettere ordine ed aggregare i contenuti.

Documentazione

Non sarebbe fico poter surfare la documentazione php all'interno del vostro editor preferito, senza doverlo abbandonare per utilizzare un browser?

Certo che sarebbe fico, e lo è. Per farlo è sufficiente fare queste cose qui:

  1. Assicurati di avere a disposizione il comando link, in caso contrario
    sudo apt-get install elinks
  2. Scarica ManPageViewer by Charles Campbell da qui
  3. Vai nella cartella in cui lo hai scaricato (Downloads?)
  4. Aprilo con vim, cioè vim manpageview.vba.gz
  5. Una volta aperto digita in vim i seguenti 2 comandi:
    :so % :q
  6. Fatto

Ora la documentazione del php è accessibile direttamente dentro vim, basterà digitare

:Man nome_funzione

ed otterrete quanto richiesto.

Documentazione del codice

Documentare il codice è buona prassi per dicersi motivi. Soprattutto se si sviluppa software open-source.

I motivi sono svariati, il primo che mi viene in mente è che se qualche anima pia mette le mani sulle vostre creazioni riesce a capirci qualche cosa. Il secondo è che se dovete rilasciare il codice e pensate bene di fornire una documentazione accurata per lo sviluppatore eviterete di passare ore ed ore a scrivere pagine html utilizzando alcuni programmi quali php documentor, docblox, doxygen, etc...

Esiste un bel plugin per vim che ci permette di fare questa cosa in modo agevole, ed utilizza la sintassi che digeriscono sia php documentor che docbox, allora:

  1. Scarica il plugin scritto da Tobias Schlitt da qui
  2. Copialo nella cartella ~/.vim/plugin/
  3. Aggiungi le seguenti linee al file di configurazione di vim (~/.vimrc)
    source ~/.vim/php-doc.vim
    inoremap <c-p> <esc>:call PhpDocSingle()<cr>i
    nnoremap <c-p> :call PhpDocSingle()<cr>
    vnoremap <c-p> :call PhpDocRange()<cr>
  4. Fatto

A questo punto se ti disponi con il cursore sulla riga di definizione di una funzione o di una classe o di una proprietà di classe etc... e premi ctrl-p una parte della documentazione viene autogenerata. Il plugin è anche configurabile in alcune sue variabili usate di default quali author, copyright, etc..., spulciatevi il codice per i dettagli.

Autocompletamento delle funzioni del php

Se sapete più o meno come si chiama una funzione che vi serve ma non ne conoscete il nome esatto e non avete voglia di sfogliare la documentazione l'autocompletamento può darvi una mano.

Aggiungete nel vostro .vimrc la seguente riga:

autocmd FileType php set omnifunc=phpcomplete#CompletePHP

A questo punto mentre state scrivendo il nome della funzione digitate ctrl-x ctrl-o ed ecco che appariranno i suggerimenti.

Inoltre vi sonsiglio caldamente di inserire questa bellezza di codice dentro il vostro .vimrc, che fa in modo di attribuire al tasto tab la funzionalità di autocompletamento degli identificatori: " Tab autocomplete
function MyTabOrComplete()
 let col = col('.')-1
 if !col || getline('.')[col-1] !~ 'k'
  return "<tab>"
 else
  return "<C-N>"
 endif
endfunction
inoremap <Tab> <C-R>=myTabOrComplete()<CR>

Comodo no?

Ricerca all'interno del codice, cscope

Utilizzando il comando cscope è possibile creare uno screenshot della cartella di lavoro che permette di cercare al volo tutti i punti nei quali viene ad esempio utilizzata una certa funzione.

  1. Scarica cscope
    sudo apt-get install cscope
  2. Spostati nella cartella di lavoro e lancia i seguenti comandi:
    find . -name '*.php' > ./cscope.files
    cscope -b
    rm cscope.files
  3. Fatto

Ora apri un file vai col cursore su un metodo richiamato anche altrove e digita ctrl- seguito immediatamente da s, ti verrà presentata la lista delle righe/file in cui compare la funzione ed una scelta per muoverti fino la. Lancia

:help cscope

per maggiori informazioni (ha un sacco di feature).

Aumentiamo di potenza, usiamo ctags

L'utilizzo di ctags è una cosa meravigliosa. Lui si costruisce un file in cui indicizza tutta una serie di tag che raccoglie parserizzando la tua directory di lavoro. E dopo ti consente di navigare da una parte all'altra come un pazzo, e non solo.

  1. Installa ctags sudo apt-get install ctags
  2. Vai nella tua directory di lavoro e lancia ctags -R in modo da crare la lista dei tags
  3. Finito

Ora apri un file, vai sopra al nome di un metodo definito da un'altra parte e vai di ctrl-], magicamente verrai portato alla definizione del metodo stesso, torna indietro con ctrl-t

Oppure digita

:ta nome_funzione

e nuovamente verrai catapultato alla dichiarazione di nome_funzione.

Nuovamente le funzionalità sono tante, dacci di help.

E poi?

E poi concluderò il discorso nella prossima puntata, dove mi riservo di inserire alcune tra le cose più utili (secondo me):

  • Debug
  • Taglist
  • Folding
  • Make program
  • Some mapping

Quindi ci sentiamo tra qualche dì.

Prosegui con la lettura della parte 2

Categorie

internet opendata piemonte web jeff php programmazione tutorial curiosita governance vim cucina sviluppo apple hardware imac crisi economia politica torino didattica flash illustrazione ricorrenze lapalisse novita release informazione html5 javascript website musica mootools mercato societa vita lavoro HMI interfaccia utente gino gino-news gino-multimedia modernità usa burocrazia jquery django testing libri nova americana etica impresa solidarietà css comunicazioni trasloco ufficio vita sociale entropia immagini fotografia concorso polymer webcomponents programming crowdfunding progetti finanziamento fallimento opensource deploy otto python