Python e Vim: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(completato)
(guida estesa e verificata)
 
(48 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
=Introduzione=
{{Versioni compatibili}}
Ci avr� provato ad installare apache (o apache2) con supporto ssl si sar� trovato davanti al problema del certificato: come generarlo? che valore ha? dove posso ottenere un certificato valido? esistono soluzioni gratuite?
== Introduzione ==
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].


Queste sono le domande normali che si pone un utente, soprattutto guardando i prezzi esorbitanti proposti per l'acquisto di certificati [http://it.wikipedia.org/wiki/SSL SSL].
== Syntax Higlight ==
La prima funzione che generalmente si abilita quando si usa un editor per programmazione è il ''syntax highlight''.


=Generazione del certificato=
Per abilitarlo in Vim per i vari linguaggi (incluso Python) è sufficiente decommentare in <code>/etc/vim/vimrc</code> la riga:
La generazione di un certificato � un po' macchinosa, ma tutto questo � a favore della sicurezza della procedura.


Per prima cosa � necessario [https://www.cacert.org/index.php?id=1&lang=it_IT registrarsi] su [http://www.cacert.org/index.php?id=0&lang=it_IT Cacert.Org]. Terminata la registrazione (confermando via email la validit� del proprio indirizzo email) siamo pronti per iniziare.
<pre>syntax on</pre>


==Registrazione di un Dominio==
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.
Per poter generare un certificato � necessario disporre di un dominio.
* Dopo essersi ''loggati'' nel portale si verr� indirizzati nella propria pagina;
* Selezioniamo, a destra, il men� '''Domini''' e la voce '''Aggiungi''';
* Inseriamo il dominio (senza ''www.'' o altro davanti) e proseguiamo;
* Per poter generare un certificato � necessario verificare che il richiedente sia effettivamente legato al dominio. Per questo motivo sono presenti degli indirizzi email predefiniti a cui inviare l'email di verifica: ''root@dominio.it'', ''hostmaster@dominio.it'', ''postmaster@dominio.it'', ''admin@lerasole.it'', ''webmaster@lerasole.it''.
* All'arrivo dell'email, confermiamo l'aggiunta del dominio.


==Generazione csr==
== Gestire l'indentazione: TAB, spazi e ''autoindent'' ==
Per poter ottenere un certificato � necessario avere una Richiesta di Sottoscrizione del Certificato (Certificate Signing Request, CSR). Per crearla usiamo il seguente comando:
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.
<pre>
 
# openssl req -nodes -new -keyout dominio.it.key -out dominio.it.csr
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:
</pre>
 
Dove, ovviamente, ''dominio.it'' rappresenta il nome del nostro dominio.
* 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 <code>/etc/vim/vimrc</code>:
<pre>  if has("autocmd")
    filetype plugin indent on
  endif</pre>
 
ed inserire il seguente codice nello stesso file:
<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.
 
La riga aggiunta associa ai tipi di file Python le seguenti impostazioni:
 
;<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.


Verranno poste le seguenti domande:
;<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 '''<'''.
<pre>
Generating a 1024 bit RSA private key
..............++++++
..................++++++
writing new private key to 'mail.knio.it.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Verona
Locality Name (eg, city) []:Garda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MaXeR
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:dominio.it
Email Address []:admin@dominio.it


Please enter the following 'extra' attributes
;<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>).
to be sent with your certificate request
A challenge password []:
An optional company name []:
</pre>


{{Box|Nota:|i dati inseriti sono futtizzi, � d'obbligo sostituirli con quelli reali}}
;<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''').


Per dare una durata di tempo al certificato aggiungere al comando openssl , -days xxx
;<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.
dove xxx sono il numero di giorni di validit� dello stesso


Verranno generati due file: ''dominio.it.key'', che rappresenta la chiave privata; ''dominio.it.csr'' che rappresenta la Richiesta di Sottoscrizione del Certificato.
== 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.


==Richiesta del Certificato==
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.  
Visualizziamo il contenuto del file '''dominio.it.csr''' e copiamolo nel form contenuto in ''Certificati per i Server (Server Certificates)'', ''Nuovo''.


Inviamo il contenuto del form e confermiamo. Al termine dell'elaborazione verr� mostrato il codice del certificato (una copia ci verr� inviata anche via email), salviamolo nel file '''dominio.it.crt'''.
Per abilitarlo basta inserire in <code>/etc/vim/vimrc</code>:


==Spostiamo i file sul server==
<pre>set foldmethod=indent</pre>
Spostiamo i tre file sul server, nella directory '''/etc/apache/ssl/''' nel caso di apache, '''/etc/apache2/ssl''' nel caso di apache2.


==Verifica del Certificato==
Di seguito sono elencati i principali comandi per gestire le piegature:
Prima di configurare il server � d'obbligo un controllo sulla correttezza del certificato. Per fare questo dobbiamo:
* Scaricare il ''root certificate'' dall'indirizzo http://www.cacert.org/certs/root.crt
* Copiarlo nella directory '''/etc/apache/ssl/''' (o '''/etc/apache2/ssl''' nel caso di apache2)
* Eseguire il comando: <pre>openssl verify -CAfile root.crt -purpose sslserver dominio.it.crt</pre>


Se tutto � stato eseguito correttamente, il controllo avr� esito positivo.
;<code>zo</code> oppure Spazio: apre la piegature sotto il cursore (un solo livello)
;<code>zO</code>: apre la piegature sotto il cursore e ricorsivamente tutte le piegature in essa contenute
;<code>zc</code>: chiude la piegatura alla quale appartiene il blocco di codice indicato dal cursore (un solo livello)
;<code>zC</code>: chiude la piegatura alla quale appartiene il blocco di codice indicato dal cursore e ricorsivamente tutte le piegature che la contengono
;<code>zr</code>: apre tutte le piegature del file corrente di un livello
;<code>zR</code>: apre completamente le piegature contenute nel file corrente (tutti i livelli)
;<code>zm</code>: chiude tutte le piegature del file corrente di un livello
;<code>zM</code>: chiude completamente le piegature contenute nel file corrente (tutti i livelli)


=Apache=
== Eseguire Python da Vim ==
==Installazione==
Vim possiede caratteristiche avanzate che permettono di impostare i compilatori da usare per ogni linguaggio e il metodo di esecuzione del <code>make</code>.
''Apache-ssl'' rappresenta il [[demone]] Apache con il supporto per ssl abilitato. L'installazione � semplice, rappresentando un pacchetto ''separato'' da apache ''normale'':
<pre>
# apt-get install apache-ssl
</pre>


==Configurazione==
Nel caso del Python propongo una soluzione ''quick and dirty'' che associa ad un tasto l'esecuzione dello script.
Prima di installare i certificati � consigliabile mettere mano alla configurazione generica del server, in modo da sistemare quei parametri relativi al dominio, all'amministratore e alla directory radice utilizzata da apache.


===Modifica impostazioni base===
Aggiungendo nell'ormai famoso <code>/etc/vim/vimrc</code>
Il file in questione � '''/etc/apache-ssl/httpd.conf'''. Le voci da adattare alla propria configurazione sono le seguenti:
; ServerName : indica il dominio al quale dovr� rispondere il server. Nel nostro caso sar� ''esempio.it''.
; ServerAdmin : l'email dell'amministratore del server. Nel nostro caso ''sysadmin@esempio.it''.
; DocumentRoot : indica la directory radice in cui si trovano le pagine che verranno mostrate da apache. Nel nostro esempio verr� mantenuto il valore di default.


===Aggiunta del Certificato===
Il file da modificare , anche in questo caso, quello principale: '''/etc/apache-ssl/httpd.conf'''. All'interno di questo presente una sottosezione, preceduta dalla riga
<pre>
<pre>
# ----------------------------SSL----------------------------------
" Running Python by pushing F5
map <f5> :w<CR>:!python %<CR>
</pre>
</pre>
All'interno di questa sezione si trovano tutte le voci di configurazione del modulo SSL; quelli che ci interessano, per una configurazione ''base'' sono ''SSLCertificateFile'' e ''SSLCertificateKeyFile''.


Commentiamo (o modifichiamo) quindi quelle gi� presenti ed aggiungiamo quelle relative al nostro certificato:
oppure, nel caso in cui si usi Python 3,
 
<pre>
<pre>
SSLCertificateFile /etc/apache-ssl/ssl/esempio.it.crt
" Running Python 3 by pushing F5
SSLCertificateKeyFile /etc/apache-ssl/ssl/esempio.it.key
map <f5> :w<CR>:!python3 %<CR>
</pre>
</pre>


Salviamo il file e riavviamo apache-ssl.
alla pressione del tasto F5 verrà eseguito <code>python</code> (o <code>python3</code>) passando come parametro il file corrente (indicato da <code>'''%'''</code>).
<pre>
 
# /etc/init.d/apache-ssl restart (o reload)
Se si è soliti usare entrambe le versioni di Python si può pensare di associare l'avvio di ciascun compilatore/interprete a tasti funzione diversi.
</pre>


=Apache2=
== Autocompletamento e documentazione integrata ==
==Installazione==
{{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>.}}
L'installazione di apache2 � semplicissima:
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.
<pre>
# apt-get install apache2
</pre>


==Attivazione del supporto SSL==
[[image: Python-gvim-7-omnicompletion.png|thumb|Screenshot della funzione di omnicompletion di Vim 7 con linguaggio di programmazione Python.]]
Per poter usare SSL in apache2 � necessario attivarlo (visto che non � presente un pacchetto apposito come ''apache-ssl''):
<pre>
# a2enmod ssl
</pre>
provvede ad attivare il supporto per SSL.


==Creazione VirtualHost==
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.
Dobbiamo, ora, creare un VirtualHost che sia in ascolto sulla porta 443.


Prima di procedere, per�, dobbiamo modificare il comportamento di Apache relativamente ai ''NameVirtualHost''.  
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.


Modifichiamo il file '''/etc/apache2/apache.conf''' e aggiungiamo, prima di
Per effettuare l'autocompletamento, quando si è in modalità inserimento basta premere <code>'''Ctrl+x Ctrl+o'''</code>.
<pre>
Include /etc/apache2/sites-enabled/[^.#]*
</pre>
le seguenti righe:
<pre>
NameVirtualHost *:80
NameVirtualHost *:443
</pre>
e assicuriamoci che l'opzione ''NameVirtualHost *'' sia commentata o rimossa dal file '''/etc/apache2/sites-available/default'''.


Modifichiamo tutti i VirtualHost aggiungendo l'indicazione delle porte (ad esempio: ''<VirtualHost *>'' diventa ''<VirtualHost *:80>'').
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>.


Ora creiamo un nuovo file, in ''/etc/apache2/sites-available''' che chiameremo '''dominio.it-ssl''', ed utilizziamo il seguente schema:
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.
<pre>
<VirtualHost *:443>
        SSLEngine On
        ServerName dominio.it
        ServerAdmin admin@dominio.it
        DocumentRoot /var/www


        ErrorLog /var/log/apache2/dominio.it-ssl_error.log
== Tips and Tricks ==
        CustomLog /var/log/apache2/dominio.it-ssl_access.log combined
Alcuni ulteriori consigli nell'uso di Vim:
</VirtualHost>
</pre>


ovviamente adattando le varie opzioni alla situazione reale...
# '''Commentare un blocco di codice'''
#* Premere <code>'''CTRL+v'''</code> e selezionare le righe di codice interessate;
#* premere <code>'''I'''</code> (i maiuscola) e digitare il carattere interessato (solitamente <code>#</code>);
#* premere ESC;
#* spostarsi dalla riga corrente.
# '''Indentare e deindentare un blocco di codice'''
#* 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.


Ora provvediamo ad attivarlo:
<pre>
# a2ensite dominio.it-ssl
</pre>


==Aggiunta Certificati==
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".
I certificati, in questo caso, verranno aggiunti in un file a parte: '''/etc/apache2/conf.d/ssl.conf''' con il seguente contenuto:
<pre>
SSLCertificateFile ssl/dominio.it.crt
SSLCertificateKeyFile ssl/dominio.it.key
SSLCertificateChainFile ssl/root.crt
</pre>


Per applicare le modifiche � sufficiente riavviare apache:
Perché ciò avvenga, basterà aggiungere all'interno del file di configurazione lo snippet:
<pre>
<pre>
# /etc/init.d/apache2 restart
" Python comments: # for adding and - for removing
map # :s/^/#/<CR>
map - :s/^#//<CR>
</pre>
</pre>
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à.


=Test di funzionamento=
== Conclusioni ==
Il miglior test � forse il pi� semplice: aprire un browser e collegarsi all'indirizzo https://esempio.it ;-)
Questi sono solo piccoli suggerimenti per programmare in Python con Vim. Come al solito correzioni, suggerimenti o aggiunte sono ben accetti e anzi incoraggiati.


=Considerazioni=
== Link ==
==Limitazioni nell'utilizzo di VirtualHost==
* [http://www.vim.org/ Homepage di Vim]
La limitazione pi� ''pesante'' che si pu� notare � l'impossibilit� di utilizzare pi� di un certificato per la stessa accoppiata ''ip:porta''. Il motivo � semplice: i dati inviati sono cifrati, quindi � impossibile, per apache, riuscire ad estrapolare il ''ServerName''... Quindi viene usata l'accoppiata ''ip:porta'' per definirlo.
* [http://www.python.org/ Homepage di Python]
* [http://www.vim.org/scripts/script.php?script_id=1542 Sito ufficiale di pythoncomplete.vim]


==Diffusione di CaCert==
{{Autori
CaCert inizia ad essere inserito, come certificato root, anche nei vari browser, evidenziando che l'attenzione verso questo progetto sta salendo... Non resta che adottarlo ed, eventualmente, fare richiesta agli sviluppatori del nostro browser preferito affinche CaCert venga inclusa.
|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)
}}


=Bookmark=
[[Categoria:Elaborazione testi]][[Categoria:Programmi da terminale]][[Categoria:Python]]
[http://www.cacert.org '''CaCert.Org''']

Versione attuale delle 12:08, 23 mar 2015

Debian-swirl.png 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 oppure ts
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 oppure et
riempe con spazi le indentazioni generate dalla pressione del tasto TAB.
shiftwidth oppure 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 <.
softtabstop oppure 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).
smarttab oppure sta
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 oppure tw
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

Info.png 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.

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.

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:

  1. 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.
  2. 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.


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 Swirl-auth40.png Debianized 40%
Estesa da:
Stemby 13:08, 23 mar 2015 (CET)
Verificata da:
Stemby 13:08, 23 mar 2015 (CET)

Verificare ed estendere la guida | Cos'è una guida Debianized