Python e Vim: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
m (piccole correzioni)
Riga 1: Riga 1:
= Introduzione: I Tasti Multimediali =
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].
I moderni sistemi multimediali ci forniscono una serie di tasti per scelte rapide che fino a poco tempo fa non erano contemplate.
Possiamo alzare il volume, far partire il player preferito o modificare la luminosit� dello schermo semplicemente con un tasto.
Purtroppo ogni produtore (sia in campo desktop che laptop) produce quasto tipo di controllo a sua descrizione, creando tastiere non-standard che vanno configurate in modo diverso di caso in caso.


Per fare ci� vi sono vari metodi: uno di questi � mostrato in [[Tasti Multimediali: configurazione ed uso|questa guida]].
== Syntax Higlight ==
Noi invece utilizzeremo Hotkeys.
La prima funzione che generalmente si abilita quando si usa un editor per programmazione è il ''syntax highlight''.


= Preparazione del sistema =
Per abilitarlo in Vim per i vari linguaggi (incluso pyton) è sufficiente decommentare in<tt>/etc/vim/vimrc</tt> la riga:


La preparazione del sistema � molto semplice, necessitiamo infatti solo di '''hotkeys''' e '''xev'''.
  syntax on
Mentre ''xev'' � probabilmente gi� installato (incluso nei pacchetti del server X) dovremo andare ad installare il demone hotkeys alla [[debian-way]]:


<pre>
# apt-get install hotkeys
</pre>


= Come Funziona Hotkeys =
== 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.


Hotkeys legge dei file con estensione ''.def'' che si trovano nella directory '''/usr/share/hotkeys'''. In questi file sono specificati i tasti (tramite il loro [[keycode]]) e l'applicazione che devono lanciare. Vi sono gi� parecchi file .def pre-impostati. Se avrete fortuna sar� sufficiente lanciare uno di questi per far funzionare la vostra tastiera. Per visualizzare la lista dei layout di tastiera disponibili, � possibile lanciare hotkeys con il flag "-l":
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:


<pre>
* Sostituzione alla pressione del tasto TAB con un numero equivalente di spazi
$ hotkeys -l
* Larghezza indentazione pari a 4 spazi.
  mx2500      - Memorex MX2500 Keyboard
  inspiron8100 - Dell Inspiron 8100 Notebook
  kbp8993      - Chicony KBP-8993 keyboard
  ...
  ipanel      - Asus IPanel
$
</pre>


Nel caso in cui la vostra tastiera non sia presente in elenco, potrete modificare un file ''.def'' o crearne uno nuovo da zero.
Per ottenere questo comportamento in Vim/gVim si può inserire il seguente codice nel file di configurazione <tt>/etc/vim/vimrc</tt>:


== Lanciare hotkeys ==
  filetype plugin indent on
  autocmd FileType python      setlocal sw=4 sts=4 et tw=78 sta


Il comando per lanciare un dato file ''.def'' con hotkeys � il seguente:
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.


<pre>
La seconda riga associa ai tipi di file python le seguenti impostazioni:
$ hotkeys -t nomefile
</pre>


ad esempio nel caso del file ''prova.def'':
;<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.


<pre>
;<tt>expandtab</tt> o <tt>et</tt>: riempe con spazi le indentazioni generate dalla pressione del tasto TAB.
$ hotkeys -t prova
</pre>


== Configurare hotkeys ==
;<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>).


Nel caso in cui la vostra tastiera non fosse inclusa nell'elenco delle tastiere supportate non vi rester� che editare un file ''.def'' o crearne uno voi stessi.
;<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 '''<'''.
Ecco dove entra in campo ''xev''!
Lanciando xev, infatti


<pre>
;<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''').
$ xev
</pre>


la pressione di ogni tasto produrr un output sul terminale in cui sar segnato il keycode del tasto premuto.


[[Immagine:Xev.jpg|thumb|center|Esempio]]
== 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.


Sar� cos� elementare aprire l'editor di testo preferito ed assegnare il comando al valore determinato con xev nel file ''.def''
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.


<pre>
Per abilitarlo basta inserire in <tt>/etc/vim/vimrc</tt>:
/usr/share/hotkeys# nano prova.def


<?xml version="1.0"?>
  set foldmethod=indent


<definition>
Di seguito sono elencati i principali comandi per gestire le piegature:


  <config model="prova Internal Keyboard">
;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)


    <VolUp      keycode="158"/>
    <VolDown    keycode="165"/>
    <Mute      keycode="166"/>


</pre>
== 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>.


== Note ==
Nel caso del python propongo una soluzione ''quick and dirty'' che associa ad un tasto l'esecuzione dello script.


Dato che probabilmente la tastiera in uso sar� sempre la stessa pu� essere utile creare uno [[creare uno script d'avvio|script]] per avviare automaticamente hotkeys all'accensione del pc e posizionarlo nella cartella ''~/.config/autostart'' [http://www.freedesktop.org (Standard freedesktop).]
Aggiungendo nell'ormai famoso <tt>/etc/vim/vimrc</tt>:


L'opzione ''-Z'' aggiunta alla stringa di lancio eviter� il fastidioso splash screen del programma.
  map <f5> :w<CR>:!python %<CR>


<pre>
alla pressione del tasto F5 verrà eseguito <tt>python</tt> passando come paramentro il file corrente (indicato da '''%''').
$ hotkeys -Z -t prova
</pre>


-----
Autore: [[Utente:Jango|jango]]


== 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.


[[Categoria:Desktop]]
[[image: Python-gvim-7-omnicompletion.png|thumb|Screenshot della funzione di omnicompletion di Vim 7 con linguaggio di programmazione Python.]]
[[Categoria:Hardware]]
 
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]]

Versione delle 09:59, 28 dic 2006

Questa pagina raccoglie piccoli suggerimenti per sfruttare al meglio Vim e gVim con il linguaggio di programmazione 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/etc/vim/vimrc 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 /etc/vim/vimrc:

 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 if, for, 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:

tabstop o ts: 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.
expandtab o et
riempe con spazi le indentazioni generate dalla pressione del tasto TAB.
softtabstop o sts
larghezza di un rientro causato dalla pressione di un TAB. Il rientro è creato inserendo spazi se et è settato, altrimenti viene usata una combinazione di spazi e caratteri TAB (questi ultimi hanno larghezza ts).
shiftwidth o sw
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 <.
smarttab o sta
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 /etc/vim/vimrc:

 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 make.

Nel caso del python propongo una soluzione quick and dirty che associa ad un tasto l'esecuzione dello script.

Aggiungendo nell'ormai famoso /etc/vim/vimrc:

 map <f5> :w<CR>:!python %<CR>

alla pressione del tasto F5 verrà eseguito python 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.

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:

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



Autore: ~ The Noise