Python e Vim: differenze tra le versioni
(→Link: elimino link: non mi sembra che tratti di Vim) |
(guida estesa e verificata) |
||
(18 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 9: | Riga 9: | ||
<pre>syntax on</pre> | <pre>syntax on</pre> | ||
Se invece si volesse abilitare questa funzionalità unicamente per il proprio utente, o se non si disponesse dei privilegi di superutente, si può creare un file <code>~/.vimrc</code> contenente quella riga che dunque andrà a sovrascrivere il comportamento di default. | |||
== Gestire l'indentazione: TAB, spazi e ''autoindent'' == | == 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. | In Python è di vitale importanza gestire correttamente l'indentazione dato che (a differenza dei linguaggi ''free-form'' come il C) questa è parte integrante della sintassi. | ||
Il Python di per sé 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 convezioni 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: | Il Python di per sé 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 convezioni 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, come raccomandato nella [https://www.python.org/dev/peps/pep-0008/#indentation PEP 8], è 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; | * sostituzione alla pressione del tasto TAB con un numero equivalente di spazi; | ||
Riga 24: | Riga 26: | ||
ed inserire il seguente codice nello stesso file: | ed inserire il seguente codice nello stesso file: | ||
<pre> autocmd FileType python | <pre> autocmd FileType python setlocal et sw=4 sts=4 sta tw=79</pre> | ||
Il primo 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 indentazione. Stessa cosa vale per i vari <code>'''if'''</code>, <code>'''for'''</code>, 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. | Il primo 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 indentazione. Stessa cosa vale per i vari <code>'''if'''</code>, <code>'''for'''</code>, 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. | ||
Riga 30: | Riga 32: | ||
La riga aggiunta associa ai tipi di file Python le seguenti impostazioni: | La riga aggiunta associa ai tipi di file Python le seguenti impostazioni: | ||
;<code>tabstop</code> oppure <code>ts</code>: larghezza del | ;<code>tabstop</code> oppure <code>ts</code>: larghezza del carattere TAB, quando incontrato nel file. Noi non useremo caratteri TAB, quindi questa impostazione può essere ignorata (e infatti non è riportata nell'esempio precedente). Viene elencata qui solo per chiarezza e completezza. | ||
;<code>expandtab</code> oppure <code>et</code>: riempe con spazi le indentazioni generate dalla pressione del tasto TAB. | ;<code>expandtab</code> oppure <code>et</code>: riempe con spazi le indentazioni generate dalla pressione del tasto TAB. | ||
;<code>shiftwidth</code> oppure <code>sw</code>: 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 '''<'''. | |||
;<code>softtabstop</code> oppure <code>sts</code>: larghezza di un rientro causato dalla pressione di un TAB. Il rientro è creato inserendo spazi se <code>'''et'''</code> è settato, altrimenti viene usata una combinazione di spazi e caratteri TAB (questi ultimi hanno larghezza <code>'''ts'''</code>). | ;<code>softtabstop</code> oppure <code>sts</code>: larghezza di un rientro causato dalla pressione di un TAB. Il rientro è creato inserendo spazi se <code>'''et'''</code> è settato, altrimenti viene usata una combinazione di spazi e caratteri TAB (questi ultimi hanno larghezza <code>'''ts'''</code>). | ||
;<code> | ;<code>smarttab</code> oppure <code>sta</code>: in combinazione con le opzioni precedenti questa impostazione permette di cancellare un rientro (4 spazi ''reali ''nel nostro caso) con una sola pressione del tasto '''BS''' (o '''BackSpace'''). | ||
;<code> | ;<code>textwidth</code> oppure <code>tw</code>: lunghezza massima del testo inserito. Una riga più lunga viene spezzata dopo uno spazio bianco per stare in questi limiti. | ||
== Folding: le piegature nel codice == | == Folding: le piegature nel codice == | ||
Riga 65: | Riga 69: | ||
Nel caso del Python propongo una soluzione ''quick and dirty'' che associa ad un tasto l'esecuzione dello script. | Nel caso del Python propongo una soluzione ''quick and dirty'' che associa ad un tasto l'esecuzione dello script. | ||
Aggiungendo nell'ormai famoso <code>/etc/vim/vimrc</code> | Aggiungendo nell'ormai famoso <code>/etc/vim/vimrc</code> | ||
<pre>map <f5> :w<CR>:!python %<CR></pre> | <pre> | ||
" Running Python by pushing F5 | |||
map <f5> :w<CR>:!python %<CR> | |||
</pre> | |||
alla pressione del tasto F5 verrà eseguito <code>python</code> passando come parametro il file corrente (indicato da <code>'''%'''</code>). | oppure, nel caso in cui si usi Python 3, | ||
<pre> | |||
" Running Python 3 by pushing F5 | |||
map <f5> :w<CR>:!python3 %<CR> | |||
</pre> | |||
alla pressione del tasto F5 verrà eseguito <code>python</code> (o <code>python3</code>) passando come parametro il file corrente (indicato da <code>'''%'''</code>). | |||
Se si è soliti usare entrambe le versioni di Python si può pensare di associare l'avvio di ciascun compilatore/interprete a tasti funzione diversi. | |||
== Autocompletamento e documentazione integrata == | == Autocompletamento e documentazione integrata == | ||
{{Box| | {{Box|Attenzione|I pacchetti <code>vim-tiny</code> e <code>vim</code> non includono questa funzionalità. Occorre dunque installare uno tra i pacchetti seguenti: <code>vim-nox</code>, <code>vim-gtk</code>, <code>vim-gnome</code> o <code>vim-athena</code>.}} | ||
Dalla versione 7 in Vim è stata inserita una funzione di autocompletamento intelligente (conosciuto anche come ''omnicompletion'') per i vari linguaggi simile a quella presente in alcuni degli IDE più avanzati. | Dalla versione 7 in Vim è stata inserita una funzione di autocompletamento intelligente (conosciuto anche come ''omnicompletion'') 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.]] | [[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 sta completando. | 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 sta 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 sta utilizzando l'autocompletamento. | 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 sta utilizzando l'autocompletamento. | ||
Per effettuare l'autocompletamento, quando si è in modalità inserimento basta premere <code>Ctrl+x Ctrl+o</code>. | Per effettuare l'autocompletamento, quando si è in modalità inserimento basta premere <code>'''Ctrl+x Ctrl+o'''</code>. | ||
A volte è anche comodo effettuare un autocompletamento ''non intelligente'', basato sulle parole presenti nel file corrente. Questo autocompletamento si ottiene premendo <code>CTRL+n</code>. Quest'ultimo metodo può risultare utile per completare nomi di variabili o di funzioni. | Per spostarsi nel riquadro della finestra occupato dalla documentazione o per chiuderlo si utilizzano i [[VimCS:_Gestione#Finestre|classici comandi di Vim]] per la gestione delle finestre, quali <code>'''CTRL+w w'''</code> e <code>''':close'''</code>. | ||
A volte è anche comodo effettuare un autocompletamento ''non intelligente'', basato sulle parole presenti nel file corrente. Questo autocompletamento si ottiene premendo <code>'''CTRL+n'''</code>. Quest'ultimo metodo può risultare utile per completare nomi di variabili o di funzioni. | |||
== Tips and Tricks == | == Tips and Tricks == | ||
Riga 89: | Riga 107: | ||
# '''Commentare un blocco di codice''' | # '''Commentare un blocco di codice''' | ||
#* Premere CTRL+v e selezionare le righe di codice interessate; | #* Premere <code>'''CTRL+v'''</code> e selezionare le righe di codice interessate; | ||
#* premere <code>'''I'''</code> (i | #* premere <code>'''I'''</code> (i maiuscola) e digitare il carattere interessato (solitamente <code>#</code>); | ||
#* premere ESC; | #* premere ESC; | ||
#* spostarsi dalla riga corrente. | |||
# '''Indentare e deindentare un blocco di codice''' | # '''Indentare e deindentare un blocco di codice''' | ||
#* Premere <code>''' | #* Premere <code>'''v'''</code> ed entrare in modalità "visuale linea"; | ||
#* | #* selezionare la parte di codice da in/deindentare; | ||
#* | #* premere <code>'''>'''</code> per indentare o <code>'''<'''</code> per deindentare di 1 TAB. | ||
In alternativa al metodo indicato al punto 1, per commentare un blocco di testo è possibile mappare un tasto qualsiasi che faccia tutto il lavoro "sporco". | |||
In alternativa al metodo indicato al punto | |||
Perché ciò avvenga, basterà aggiungere all'interno del file di configurazione lo snippet: | |||
<pre> | <pre> | ||
" # | " Python comments: # for adding and - for removing | ||
map # :s/^/#/<CR> | map # :s/^/#/<CR> | ||
map - :s/^#//<CR> | map - :s/^#//<CR> | ||
</pre> | </pre> | ||
La semplice digitazione del carattere | La semplice digitazione del carattere <code>'''#'''</code> farà in modo che il blocco in quel momento selezionato sia commentato in automatico; quella del carattere <code>'''-'''</code> invece lo decommenterà. | ||
== Conclusioni == | == Conclusioni == | ||
Questi sono solo piccoli suggerimenti per programmare in Python con Vim. Come al solito, | Questi sono solo piccoli suggerimenti per programmare in Python con Vim. Come al solito correzioni, suggerimenti o aggiunte sono ben accetti e anzi incoraggiati. | ||
== Link == | == Link == | ||
Riga 117: | Riga 135: | ||
* [http://www.vim.org/scripts/script.php?script_id=1542 Sito ufficiale di pythoncomplete.vim] | * [http://www.vim.org/scripts/script.php?script_id=1542 Sito ufficiale di pythoncomplete.vim] | ||
{{Autori | |||
Autore | |Autore = [[Utente:TheNoise|~ The Noise]] | ||
|Verificata_da = | |||
:[[Utente:Stemby|Stemby]] 13:08, 23 mar 2015 (CET) | |||
|Numero_revisori = 1 | |||
|Estesa_da = | |||
: [[Utente:Stemby|Stemby]] 13:08, 23 mar 2015 (CET) | |||
}} | |||
[[Categoria:Elaborazione testi]][[Categoria:Programmi da terminale]][[Categoria:Python]] | [[Categoria:Elaborazione testi]][[Categoria:Programmi da terminale]][[Categoria:Python]] |
Versione attuale delle 12:08, 23 mar 2015
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
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 Python) è sufficiente decommentare in /etc/vim/vimrc
la riga:
syntax on
Se invece si volesse abilitare questa funzionalità unicamente per il proprio utente, o se non si disponesse dei privilegi di superutente, si può creare un file ~/.vimrc
contenente quella riga che dunque andrà a sovrascrivere il comportamento di default.
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 il C) questa è parte integrante della sintassi.
Il Python di per sé 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 convezioni 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, come raccomandato nella PEP 8, è 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 possono decommentare le seguenti righe nel file di configurazione /etc/vim/vimrc
:
if has("autocmd") filetype plugin indent on endif
ed inserire il seguente codice nello stesso file:
autocmd FileType python setlocal et sw=4 sts=4 sta tw=79
Il primo 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 indentazione. 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 riga aggiunta associa ai tipi di file Python le seguenti impostazioni:
tabstop
oppurets
- larghezza del carattere TAB, quando incontrato nel file. Noi non useremo caratteri TAB, quindi questa impostazione può essere ignorata (e infatti non è riportata nell'esempio precedente). Viene elencata qui solo per chiarezza e completezza.
expandtab
oppureet
- riempe con spazi le indentazioni generate dalla pressione del tasto TAB.
shiftwidth
oppuresw
- 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 <.
softtabstop
oppurests
- 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 larghezzats
).
smarttab
oppuresta
- in combinazione con le opzioni precedenti questa impostazione permette di cancellare un rientro (4 spazi reali nel nostro caso) con una sola pressione del tasto BS (o BackSpace).
textwidth
oppuretw
- lunghezza massima del testo inserito. Una riga più lunga viene spezzata dopo uno spazio bianco per stare in questi limiti.
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
" Running Python by pushing F5 map <f5> :w<CR>:!python %<CR>
oppure, nel caso in cui si usi Python 3,
" Running Python 3 by pushing F5 map <f5> :w<CR>:!python3 %<CR>
alla pressione del tasto F5 verrà eseguito python
(o python3
) passando come parametro il file corrente (indicato da %
).
Se si è soliti usare entrambe le versioni di Python si può pensare di associare l'avvio di ciascun compilatore/interprete a tasti funzione diversi.
Autocompletamento e documentazione integrata
Attenzione I pacchetti vim-tiny e vim non includono questa funzionalità. Occorre dunque installare uno tra i pacchetti seguenti: vim-nox , vim-gtk , vim-gnome o vim-athena .
|
Dalla versione 7 in Vim è stata inserita una funzione di autocompletamento intelligente (conosciuto anche come omnicompletion) per i vari linguaggi simile a quella presente in alcuni degli IDE più avanzati.
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 sta 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 sta utilizzando l'autocompletamento.
Per effettuare l'autocompletamento, quando si è in modalità inserimento basta premere Ctrl+x Ctrl+o
.
Per spostarsi nel riquadro della finestra occupato dalla documentazione o per chiuderlo si utilizzano i classici comandi di Vim per la gestione delle finestre, quali CTRL+w w
e :close
.
A volte è anche comodo effettuare un autocompletamento non intelligente, basato sulle parole presenti nel file corrente. Questo autocompletamento si ottiene premendo CTRL+n
. Quest'ultimo metodo può risultare utile per completare nomi di variabili o di funzioni.
Tips and Tricks
Alcuni ulteriori consigli nell'uso di Vim:
- Commentare un blocco di codice
- Premere
CTRL+v
e selezionare le righe di codice interessate; - premere
I
(i maiuscola) e digitare il carattere interessato (solitamente#
); - premere ESC;
- spostarsi dalla riga corrente.
- Premere
- Indentare e deindentare un blocco di codice
- Premere
v
ed entrare in modalità "visuale linea"; - selezionare la parte di codice da in/deindentare;
- premere
>
per indentare o<
per deindentare di 1 TAB.
- Premere
In alternativa al metodo indicato al punto 1, per commentare un blocco di testo è possibile mappare un tasto qualsiasi che faccia tutto il lavoro "sporco".
Perché ciò avvenga, basterà aggiungere all'interno del file di configurazione lo snippet:
" Python comments: # for adding and - for removing map # :s/^/#/<CR> map - :s/^#//<CR>
La semplice digitazione del carattere #
farà in modo che il blocco in quel momento selezionato sia commentato in automatico; quella del carattere -
invece lo decommenterà.
Conclusioni
Questi sono solo piccoli suggerimenti per programmare in Python con Vim. Come al solito correzioni, suggerimenti o aggiunte sono ben accetti e anzi incoraggiati.
Link
Guida scritta da: ~ The Noise | Debianized 40% |
Estesa da:
| |
Verificata da:
| |
Verificare ed estendere la guida | Cos'è una guida Debianized |