|
|
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].
| | Parto dal presupposto che questa sia una mini-guida per coloro i quali hanno da poco messo le mani su linux e pi� nello specifico su Debian. |
| | Il nostro amato sistema operativo ha in effetti alcune carenze, dal punto di vista del desktop user, per i files midi. Ed ecco come avere in poco tempo un sistemino che funziona alla grande per aprire i midi, ed anche integrarli nella navigazione su internet. |
| | La critica verso gnu/linux in generale � che per ora non ci sia un media player modello Windows Media Player in grado di aprire intuitivamente pi� formati, da un mp3 ad un wav ad un midi. A tale scopo annoto che ci sono molti progetti che vanno in quella direzione, in primis xmms-timidity (un plugin di xmms che si appoggia su timidity per i midi) e kaffeine che se non lo ha gi� fatto presto integrer� un midi player, timidity based. Dunque il tempo semplificher� le cose. Ma per ora smanettiamo un po' in console per fare come a NOI piace. |
|
| |
|
| == Syntax Higlight ==
| | Uso sarge, ma avendo messo le mani anche su etch ho notato che la situazione qui descritta � portabile anche sulla futura stable. |
| 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:
| | In primis ci serve un midi player. Timidity si rivela il migliore dal punto di vista della semplicit�. Dunque: |
|
| |
|
| syntax on
| | Diventiamo super-user |
| | <pre>su</pre> |
| | Installiamo timidity e le interfacce extra. |
| | <pre>apt-get install timidity timidity-interfaces-extra</pre> |
| | A questo punto ci servono dei soundfonts, almeno che la nostra scheda non ne abbia bisogno. Per toglierci il dubbio scarichiamo un midi e suoniamolo con timidity:<pre>wget http://manteau.de/files/x_av_primavera1.mid</pre> |
| | e poi |
| | <pre>timidity x_av_primavera1.mid</pre> |
| | Se ci sono errori, o non sentite nulla, andiamo sul sicuro e scarichiamoci dei soundfonts. |
| | Cercate quelli che vi piacciono, ma questi non sono male, dunque: |
| | <pre>wget ftp://ftp.personalcopy.net/pub/Unison.sf2.gz</pre>poi<pre>tar xzvf Unison.sf2.gz</pre> |
| | A questo punto possiamo prendere il file sf2 scompattato e metterlo in un posto diciamo "di sistema". A questo punto io l'ho messo in /usr/share/timidity/:<pre>mkdir /usr/share/timidity;mv *.sf2 /usr/share/timidity</pre> |
|
| |
|
| | Siamo a buon punto, andiamo a modificare il file di configurazione di timidity in modo che vada a leggere i soundfonts.<pre>nano /etc/timidity/timidity.cfg</pre>Mettiamo un bel cancelletto ( # ) davanti a <pre>source /etc/timidity/freepats.cfg</pre>ottenendo<pre># source /etc/timidity/freepats.cfg</pre> e aggiungiamo al file questi parametri:<pre>dir /usr/share/timidity |
| | soundfont unison.sf2 order=0</pre> |
| | A questo punto il nostro timidity legge senza problemi i files midi. Riprovate a leggere il file x_av_primavera1.mid. |
|
| |
|
| == Gestire l'indentazione: TAB, spazi e ''autoindent'' ==
| | Veniamo al fine tuning. Come si pu� integrare con il desktop il nostro timidity? |
| In python � di vitale importanza gestire correttamente l'indentazione dato che (a differenza dei linguaggi ''free-form'' come C) questa � parte integrante della sintassi.
| | Ecco due script da aggiungere nella nostra /usr/bin. Iniziamo con il creare il lettore dei singoli files: |
| | <pre>nano /usr/bin/playmidi</pre>Il file conterr� questo<pre>#!/bin/bash |
| | FILE_NAME=`basename "$1"` |
| | DIR_NAME=`dirname "$1"` |
| | OPT='-iatv' |
| | PROGRAM="/usr/bin/timidity" |
| | cd "$DIR_NAME" |
| | "$PROGRAM" "$OPT" "$FILE_NAME"</pre> |
| | E rendiamolo eseguibile<pre>chmod 777 /usr/bin/playmidi</pre> |
|
| |
|
| 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:
| | Notare il parametro OPT che contiene la stringa -iatv. Questa � una sola delle molte interfacce di timidity. Se volete una interfaccia GTK basta sostituire a -iatv il parametro -ig ed il gioco � fatto. |
| | A questo punto baster� associare al file manager del vostro DE ai file midi (.mid) il comando /usr/bin/playmidi. Essendo desktop dipendente lascio a voi questo compito. |
|
| |
|
| * Sostituzione alla pressione del tasto TAB con un numero equivalente di spazi
| | Una variante di script che permette di mettere in play una directory intera � lo script playmididir<pre>#!/bin/bash |
| * Larghezza indentazione pari a 4 spazi.
| | DIR_NAME=`dirname "$1"` |
| | OPT='-iatv' |
| | PROGRAM="/usr/bin/timidity" |
| | cd "$DIR_NAME" |
| | "$PROGRAM" "$OPT" "$DIR_NAME"</pre> |
|
| |
|
| Per ottenere questo comportamento in Vim/gVim si pu� inserire il seguente codice nel file di configurazione <tt>/etc/vim/vimrc</tt>:
| | La gestione di cosa e come aprire, come sopra, dipende dal desktop environment che usate, e dunque lascio a voi le impostazioni. |
|
| |
|
| filetype plugin indent on
| | Non rimane che suonare i midi di internet. A tale scopo � disponibile il plugin di firefox MediaPlayerConnectivity disponibile su https://addons.mozilla.org/firefox/446/ |
| autocmd FileType python setlocal sw=4 sts=4 et tw=78 sta
| | In questo plugin � sufficente indicare come player dei midi il nostro playmidi ed il gioco � fatto! |
|
| |
|
| 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.
| | Spero di essere stato utile a chi, come me, all'inizio rimane sconcertato nell'avere difficolt� ad ascoltare la propria collezione di midi, o le sue creazioni. Con questi, che sembrano, accrocchi in realt� si intuisce il potere di linux. Il potere del controllo totale sulla propria macchina, e considerando che l'utilizzo di GUI render� sempre pi� agevole questo compito... Possiamo ben sperare nel futuro di linux come sistema desktop. |
| | |
| 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]]
| |