Utente:MaXeR: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
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].
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. &Egrave; 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. &Egrave; 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. &Egrave; 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]]