|
|
(32 versioni intermedie di 5 utenti non mostrate) |
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].
| | {{Template:LKN}} |
| | __TOC__ |
|
| |
|
| == Syntax Higlight ==
| | Molte delle informazioni contenute in questo libro sono state estratte dalla documentazione del kernel e dal codice sorgente. La documentazione è infatti il miglior posto dove trovare informazioni e riferimenti su come compilare e installare il kernel ed è normalmente tenuta aggiornata a seguito di cambiamenti nella procedura di compilazione. |
| 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:
| | == Libri == |
| | Sono disponibili molti ottimi libri relativi alla programmazione del kernel Linux, ma solo pochi di essi trattano la compilazione e installazione del kernel. Ecco un elenco di libri che ho trovato utili. |
|
| |
|
| syntax on
| | === Libri generici su Linux === |
|
| |
|
| | * Ellen Siever, Aaron Weber, Stephen Figgins, Robert Love, e Arnold Robbins. ''Linux in a Nutshell'' (O’Reilly), 2005.<br/>Questo libro comprende una delle più complete e autorevoli guide ai comandi per Linux. Essa copre praticamente ogni singolo comando di cui potreste mai aver bisogno. |
|
| |
|
| == Gestire l'indentazione: TAB, spazi e ''autoindent'' ==
| | * Yaghmour, Karim. ''Building Embedded Linux Systems'' (O’Reilly), 2003.<br/>Questo libro, sebben principalmente rivolto agli sviluppatori di sistemi Linux embedded, contiene un'ottima sezione relativa a come creare una ''toolchain'' e un kernel con compilazione incrociata. Oltre a questa sezione del libro, è consigliato anche in virtù di altre sezioni che forniscono interessanti informazioni per coloro che vogliono imparare come personalizzare il kernel e il resto del sistema. |
| 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:
| | === Libri inerenti il kernel Linux === |
|
| |
|
| * Sostituzione alla pressione del tasto TAB con un numero equivalente di spazi
| | Molti di questi libri sono indirizzati ai programmatori interessati ad apprendere come programmare all'interno del kernel. Sono generalmente molto tecnici rispetto a questo libro, ma sono un ottimo punto di partenza se desiderate imparare e capire il codice che governa il kernel. |
| * Larghezza indentazione pari a 4 spazi.
| |
|
| |
|
| Per ottenere questo comportamento in Vim/gVim si pu� inserire il seguente codice nel file di configurazione <tt>/etc/vim/vimrc</tt>:
| | *Jonathan Corbet, Alessandro Rubini, e Greg Kroah-Hartman. ''Linux Device Drivers'' (O’Reilly), 2005.<br/>Questo libro illustra come differenti ''device driver'' operano e fornisce parecchi esempi applicatici di driver funzionanti. È consigliato a chiunque vuole programmare driver per il kernel. È disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/ |
|
| |
|
| filetype plugin indent on
| | * Love, Robert. ''Linux Kernel Development'' (Novell Press Publishing), 2005.<br/> Questo libro copre quasi tutti gli aspetti relativi al kernel Linux, illustrando come tutto opera insieme. Ottimo punto di partenza per iniziare a capire e conoscere le diverse componenti del kernel. |
| 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 <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.
| | * Bovet, Daniel P. e Cesate, Marco. ''Understanding the Linux Kernel'' (O’Reilly), 2005.<br/> Questo libro si addentra negli aspetti relativi la progettazione e implementazione del nucleo del kernel Linux. Un ottimo riferimento per apprendere e capire gli algoritmi utilizzati nelle diverse porzioni del kernel. Fortemente consigliato a coloro che vogliono comprendere nel dettaglio come funziona il kernel. |
|
| |
|
| La seconda riga associa ai tipi di file python le seguenti impostazioni:
| | == Strumenti == |
|
| |
|
| ;<tt>tabstop</tt> oppure <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.
| | In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento un elenco dei siti dove è possibile reperire e scaricare tali strumenti. |
|
| |
|
| ;<tt>expandtab</tt> oppure <tt>et</tt>: riempe con spazi le indentazioni generate dalla pressione del tasto TAB.
| | * ''Linux kernel''<br/> http://www.kernel.org e ftp://ftp.kernel.org contiene tutte le versioni del sorgente del kernel. http://www.kernel.org/git/ contiene una lista di tutti i ''git trees'' utilizzati dai diversi sviluppatori del kernel. |
|
| |
|
| ;<tt>softtabstop</tt> oppure <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>).
| | * ''gcc''<br>http://gcc.gnu.org/ sito principale per tutto ciò che concerne il compilatore GNU C. |
|
| |
|
| ;<tt>shiftwidth</tt> oppure <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 '''<'''.
| | * ''binutils''<br/>http://www.gnu.org/software/binutils/ è il sito principale dove trovare tutte le informazioni su binutils. |
|
| |
|
| ;<tt>smarttab</tt> oppure <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''').
| | * ''make''<br/>http://www.gnu.org/software/make/ è il sito principale dove trovare tutte le informazioni su make. |
|
| |
|
| | *''util-linux''<br/>http://www.kernel.org/pub/linux/utils/util-linux/ è la directory da dove possono essere scaricate tutte le versioni di util-linux. |
|
| |
|
| == Folding: le piegature nel codice ==
| | * ''module-init-tools''<br/>http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/ è la directory da dove possono essere scaricate tutte le versioni di module-init-tools. |
| 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.
| | * ''e2fsprogs''<br/>http://e2fsprogs.sourceforge.net/ è la pagina principale del progetto e2fsprogs. |
|
| |
|
| Per abilitarlo basta inserire in <tt>/etc/vim/vimrc</tt>:
| | * ''jfsutils''<br/>http://jfs.sourceforge.net/ è la pagina principale del progetto jfsutils. |
|
| |
|
| set foldmethod=indent
| | * ''reiserfsprogs''<br/>http://www.namesys.com/download.html è la pagina principale del progetto reiserfsprogs. |
|
| |
|
| Di seguito sono elencati i principali comandi per gestire le piegature:
| | * ''xfsprogs''<br/>http://oss.sgi.com/projects/xfs/ è la pagina principale del progetto xfsprogs. |
|
| |
|
| ;zo oppure Spazio: apre la piegature sotto il cursore (un solo livello)
| | * ''quota-tools''<br/>http://sourceforge.net/projects/linuxquota/ è la pagina principale del progetto quota-tools. |
| ;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)
| |
|
| |
|
| | * ''nfs-utils''<br/>http://nfs.sf.net/ è la pagina principale del progetto nfs-utils. |
|
| |
|
| == Eseguire python da Vim ==
| | * ''udev''<br/>http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html è la directory da dove possono essere scaricate tutte le versioni di udev. |
| 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.
| | * ''procfs''<br/>http://procps.sourceforge.net/ è la pagina principale del progetto procfs. |
|
| |
|
| Aggiungendo nell'ormai famoso <tt>/etc/vim/vimrc</tt>:
| | * ''patchutils''<br/>http://cyberelk.net/tim/patchutils è la directory da dove possono essere scaricate tutte le versioni di patchutils. |
|
| |
|
| map <f5> :w<CR>:!python %<CR>
| | * ''git''<br/>http://git.or.cz/ è il sito principale del progetto git. |
|
| |
|
| alla pressione del tasto F5 verr� eseguito <tt>python</tt> passando come paramentro il file corrente (indicato da '''%''').
| | * ''ketchup''<br/>http://www.selenic.com/ketchup/ è la pagina principale del progetto ketchup. |
|
| |
|
| | * ''quilt''<br/>http://savannah.nongnu.org/projects/quilt è la pagina principale del progetto quilt. |
|
| |
|
| == Autocompletamento (aka omnicompletion) e documentazione integrata ==
| | * ''distcc''<br/>http://distcc.samba.org/ è la pagina principale del progetto distcc. |
| 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.]]
| | * ''ccache''<br/>http://ccache.samba.org/ è la pagina principale del progetto ccache. |
|
| |
|
| 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:
| | ---- |
| | | This is an indipendent translation of the book [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] by [http://www.kroah.com/log/ Greg Kroah-Hartman]. This translation (like the original work) is available under the terms of [http://creativecommons.org/licenses/by-sa/2.5/ Creative Commons Attribution-ShareAlike 2.5]. |
| * [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.
| |
| | |
| | |
| == 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 <tt>'''I'''</tt> (i grande) e digitare il carattere interessato (solitamente #)
| |
| #* premere ESC
| |
| # '''Indentare e deindentare un blocco di codice'''
| |
| #* Premere <tt>'''V</tt>''' (shift + v) ed entrare in Visual Mode
| |
| #* Selezionare la parte di codice da in/deindentare
| |
| #* Premere <tt>'''></tt>''' per indentare o <tt>'''<</tt>''' per deindentare di 1 TAB
| |
| | |
| == 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)]
| |
|
| |
|
| | [http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appb.pdf ''Capitolo originale''] |
|
| |
|
| ----
| | [[Categoria:Documentazione tecnica]] |
| Autore iniziale: [[Utente:TheNoise|~ The Noise]]
| | [[Categoria:Linux Kernel in a Nutshell]] |
| | |
| [[Categoria:Desktop]][[Categoria:Tips&Tricks]]
| |