1 487
contributi
mNessun oggetto della modifica |
mNessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
Questa pagina raccoglie piccoli suggerimenti per sfruttare al meglio [http://www.vim.org/ Vim] e gVim con il linguaggio di programmazione [http://www.python.org/ Python]. | |||
== Syntax Higlight == | |||
La prima funzione che generalmente si abilita quando si usa un editor per programmazione � il ''syntax highlight''. | |||
Per abilitarlo in Vim per i vari linguaggi (incluso pyton) � sufficiente decommentare in<tt>/etc/vim/vimrc</tt> la riga: | |||
syntax on | |||
== Gestire l'indentazione: TAB, spazi e ''autoindent'' == | |||
In python � di vitale importanza gestire correttamente l'indentazione dato che (a differenza dei linguaggi ''free-form'' come C) questa � parte integrante della sintassi. | |||
Il python di per se riconosce ogni tipo di indentazione (TAB, spazi, o un mix dei due). Nei moderni sistemi il TAB ha tuttavia una larghezza variabile ed impostabile a piacere. Per evitare dunque problemi di interoperabilit� tra persone che usano convezione diverse � universalmente consigliato di usare nei file di codice python solamente spazi oppure solamente TAB. Anche l'uso esclusivo di TAB pu� talvolta creare dei problemi di visualizzazione (e quindi difficolt� di lettura) a causa di una diversa larghezza usata. Per tagliare la testa al toro, dunque, il modo pi� robusto e portabile di programmare in python � quello di usare soltanto spazi. È possibile impostare qualsiasi editor per programmazione in modo da sostituire automaticamente al TAB un numero di spazi pari alla larghezza dell'indentazione, e ovviamente anche Vim non � da meno. La larghezza per una unit� di indentazione usata quasi universalmente in python � pari ad una larghezza di 4 spazi. Per ricapitolare il nostro scopo � ottenere: | |||
* Sostituzione alla pressione del tasto TAB con un numero equivalente di spazi | |||
* Larghezza indentazione pari a 4 spazi. | |||
Per ottenere questo comportamento in Vim/gVim si pu� inserire il seguente codice nel file di configurazione <tt>/etc/vim/vimrc</tt>: | |||
filetype plugin indent on | |||
autocmd FileType python setlocal sw=4 sts=4 et tw=78 sta | |||
La prima riga abilita l'indentazione automatica per i vari linguaggi di programmazione. In particolare per il python, se ad esempio dichiariamo una funzione su una riga, andando a capo avremo gi� il cursore indentato per poter scrivere il corpo della funzione con la giusta indenzatione. Stessa cosa vale per i vari <tt>'''if'''</tt>, <tt>'''for'''</tt>, ecc... Questa funzione � utile anche per accorgersi di errori sintattici come la mancanza dei :, poich� la loro assenza fa si che il cursore non venga indentato. | |||
La seconda riga associa ai tipi di file python le seguenti impostazioni: | |||
;<tt>tabstop<tt> o <tt>ts</tt>: larghezza del ''carattere TAB'', quando incontrato nel file. Noi non useremo ''caratteri TAB'' quindi questa impostazione pu� essere ignorata (e non � riportata infatti nell'esempio precendente). Viene elencata qui solo per chiarezza e completezza. | |||
;<tt>expandtab</tt> o <tt>et</tt>: riempe con spazi le indentazioni generate dalla pressione del tasto TAB. | |||
;<tt>softtabstop</tt> o <tt>sts</tt>: larghezza di un rientro causato dalla pressione di un TAB. Il rientro � creato inserendo spazi se <tt>'''et'''</tt> � settato, altrimenti viene usata una combinazione di spazi e caratteri TAB (questi ultimi hanno larghezza <tt>'''ts'''</tt>). | |||
;<tt>shiftwidth</tt> o <tt>sw</tt>: larghezza di un rientro dell'indentazione automatica. È usato anche per definire la larghezza del rientro che si aggiunge o toglie ad un blocco di testo quando si seleziona (con '''v''') e poi si indenta/deindenta con '''>''' o con '''<'''. | |||
;<tt>smarttab</tt> o <tt>sta</tt>: In combinazione con le opzioni precendenti questa impostazione permette di cancellare un rientro (4 spazi ''reali ''nel nostro caso) con una sola pressione del tasto '''BS''' (o '''BackSpace'''). | |||
== Folding: le piegature nel codice == | |||
Una funzione comoda durante la programmazione � la possibilit� di ripiegare del codice (ad esempio una funzione o una classe) in modo di avere una visione pi� compatta del file e facilitare la navigazione. | |||
Questo � possibile in Vim tramite il ''folding'' (''piegature''). Esistono dei plugin per Vim che riconoscono le strutture sintattiche del python e creano automaticamente le piegature. Tuttavia il metodo illustrato di seguito � ancora pi� semplice: piegature automatiche in base all'indentazione. Nel caso del python questo semplice metodo � particolarmente efficace. | |||
Per abilitarlo basta inserire in <tt>/etc/vim/vimrc</tt>: | |||
set foldmethod=indent | |||
Di seguito sono elencati i principali comandi per gestire le piegature: | |||
;zo oppure Spazio: apre la piegature sotto il cursore (un solo livello) | |||
;zO: apre la piegature sotto il cursore e ricorsivamente tutte le piegature in essa contenute | |||
;zc: chiude la piegatura alla quale appartiene il blocco di codice indicato dal cursore (un solo livello) | |||
;zC: chiude la piegatura alla quale appartiene il blocco di codice indicato dal cursore e ricorsivamente tutte le piegature che la contengono | |||
;zr: apre tutte le piegature del file corrente di un livello | |||
;zR: apre completamente le piegature contenute nel file corrente (tutti i livelli) | |||
;zm: chiude tutte le piegature del file corrente di un livello | |||
;zM: chiude completamente le piegature contenute nel file corrente (tutti i livelli) | |||
== Eseguire python da Vim == | |||
Vim possiede caratteristiche avanzate che permettono di impostare i compilatori da usare per ogni linguaggio e il metodo di esecuzione del <code>make</code>. | |||
Nel caso del python propongo una soluzione ''quick and dirty'' che associa ad un tasto l'esecuzione dello script. | |||
Aggiungendo nell'ormai famoso <tt>/etc/vim/vimrc</tt>: | |||
map <f5> :w<CR>:!python %<CR> | |||
alla pressione del tasto F5 verr� eseguito <tt>python</tt> passando come paramentro il file corrente (indicato da '''%'''). | |||
== Autocompletamento (aka omnicompletion) e documentazione integrata == | |||
Dalla versione 7 in Vim � stata inserita una funzione di autocompletamento intelligente per i vari linguaggi simile a quella presente in alcuni degli IDE pi� avanzati. | |||
[[image: Python-gvim-7-omnicompletion.png|thumb|Screenshot della funzione di omnicompletion di Vim 7 con linguaggio di programmazione Python.]] | |||
Per il python questa funzione permette di completare i nomi delle classi dei metodi e degli attributi tramite un comodo menu contestuale. Inoltre viene anche visualizzata contemporaneamente la docstring del metodo o della classe che si st� completando. | |||
Una immagine vale pi� di mille parole. Potete notare la funzione di omnicompletion in funzione nello screenshot qui a fianco. Notare come sulla parte superiore della finestra sia apparsa automaticamente la documentazione della classe sulla quale si st� operando l'autocompletamento. | |||
Per effettuare l'autocompletamento basta premere "CTRL+x o", ma ricordate che � necessaria la versione 7 (o successive) di Vim. È opportuno scaricare anche la versione aggiornata del file che gestisce l'autocompletamento in python. Ecco un link: | |||
* [http://www.vim.org/scripts/script.php?script_id=1542 pythoncomplete.vim] | |||
A volte � anche comodo effettuare un autocompletamento ''non intelligente'', basato sulle parole presenti nel file corrente. Questo autompletamento si ottiene premendo "CTRL+n". Quest'ultimo metodo pu� risultare utile per completare nomi di variabili o di funzioni. | |||
== Conclusioni == | |||
Questi sono solo piccoli suggerimenti per programmare in python con Vim. Come al solito, ogni correzione, suggerimento o aggiunta � ben accetto e anzi incoraggiato. | |||
== Link == | |||
* [http://www.vim.org/ Homepage di Vim] | |||
* [http://www.python.org/ Homepage di Python] | |||
* [http://mail.python.org/pipermail/python-list/2005-July/330551.html Folding in Vim (thread su python list)] | |||
---- | |||
Autore: [[Utente:TheNoise|~ The Noise]] | |||
[[Categoria:Desktop]][[Categoria:Tips&Tricks]] |
contributi