11 febrero 2011

Vim como python ide

Tenía, desde hace tiempo, en tareas pendientes aprender python. Así que he aprovechado que un bash script (sencillo pero con muchas operaciones) me va algo lento para empezar en esta tarea traduciendo este script.

Como estoy muy comodo con Vim y he quedado muy contento adaptándolo para ser un bash ide, me dispuse a buscar algunos pluguins para realizar algo parecido. En esta busqueda me encontre con este ejemplo de python ide que he modificado a mi gusto. Podéis consultar la lista de plugins de Vim.

El primer pluguin es NERD Tree que se utiliza para navegar entre archivos y directorios de forma visual. Para ver como instalarlo podeis ver mi anterior artículo NERD Tree árbol de directorios para Vim. Os dejo también un par de variables que poner en vuestro .vimrc si os interesan las funciones. Vemos todas las funciones y mapeos escribiendo "?" en la ventana de NERD Tree

vim ~/.vimrc

let NERDTreeShowHidden=1 # Ver archivos ocultos
let NERDTreeQuitOnOpen=1 # Cerrar después de abrir archivo/s

Se puede navegar de forma visual entre las funciones, clases, variables ... del código con Taglist. Para instalarlo descargamos el plugin, lo copiamos en la carpeta correspondiente y lo descomprimimos.

wget -O taglist_45.zip http://vim.sourceforge.net/scripts/download_script.php?src_id=7701
sudo unzip taglist_45.zip
sudo rm taglist_45.zip
sudo cp /ruta/taglist_45/doc/* ~/.vim/doc
sudo cp /ruta/taglist_45/plugin/* ~/.vim/plugin

Podemos mapear la acción de abrir el plugin poniendo lo siguiente en ~/.vimrc

vim ~/.vimrc

map <tecla_queramos> :TlistToggle<CR>

Para que funcione instalamos el siguiente paquete

sudo aptitude install exuberant-ctags

El siguiente pluguin (mru) nos proporciona la lista de archivos reciente y nos permite abrirlos de manera sencilla.

cd ~/.vim/pluguin
wget -O mru.vim http://vim.sourceforge.net/scripts/download_script.php?src_id=11919

Lo haremos funcionar escribiendo lo siguiente y mapeándolo en .vimrc si se desea

:MRU

vim ~/.vimrc

map <tecla_queramos> :MRU <CR>


Tasklist nos permite listar y navegar de manera rápida entre los TODO que tengamos en nuestro código. Más concretamente lo que busca es FIXME, TODO y XXX.

cd ~/.vim/pluguin
wget -O tasklist.vim http://www.vim.org/scripts/download_script.php?src_id=10388

Para ejecutarlo nos sirve con presionar

\t

Si queremos modificar su comportamiento

vim ~/.vimrc

let g:tlWindowPosition = 0 #la ventana se muestra arriba
let g:tlTokenList = ['ESTA', 'OTRA', 'AQUELLA'] #cambiar palabras de busqueda

Otra aportación es minibuferexplorer que emula con nuestros bufers (o archivos abiertos) las pestañas. Cuando tengamos más de un bufer nos aparecera una línea arriba como si fueran pestañas con el nombre de los archivos, coloreado de manera diferente el activo, además de señalarlos los que estan sin guardar (para navegar entre ellos).

cd ~/.vim/pluguin
wget -O minibufexpl.vim http://vim.sourceforge.net/scripts/download_script.php?src_id=3640

Algunas variables interesantes

vim ~/.vimrc

let g:miniBufExplMapWindowNavArrows = 1 # moverse entre ventanas con CTRL+Flechas
let g:miniBufExplModSelTarget = 1 # poder usar otros exploradores como taglist ...
let g:miniBufExplMapCTabSwitchBufs = 1 # moverse entre buffers con CTRL+Tab

Con NERD Commenter sera muy fácil comentar o descomentar una o varias líneas.

wget -O nerdcommenter.zip http://vim.sourceforge.net/scripts/download_script.php?src_id=14455
sudo unzip nerdcommenter.zip
sudo rm nerdcommenter.zip
sudo cp /ruta/nerdcommenter/doc/* ~/.vim/doc
sudo cp /ruta/nerdcommenter/plugin/* ~/.vim/plugin

Simplemente en modo normal o en visual con una selección pulsamos

\cc # Comentar
\cu # Descomentar
\c+espacio # Comenta/Descomenta según el estado actual

Desde Vim 7, (si esta compilado con soporte para python) el siguiente pluguin ya esta instalado aunque, yo lo he instalado para actualizar la versión y así tengo mi carpeta ~/.vim completa para llevarla en un pendrive. Pythoncomplete auto completa nuestro código y nos muestra una explicación de nuestras posibilidades.

mkdir ~/.vim/autoload
cd ~/.vim/autoload
wget -O pythoncomplete.vim http://www.vim.org/scripts/download_script.php?src_id=10872

Lo mapeamos y cambiamos un par de cosas

vim ~/.vimrc

imap <tecla_queramos> <C-x><C-o> # mapeamos el autocompletado
set completeopt=menuone,preview # muestra menú con opciones de auto completado y su documentación
# Cierra ventana de documentación cuando escojamos nuestra opción
autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
autocmd InsertLeave * if pumvisible() == 0|pclose|endif

Según pone en la página de python para "estandarizar" la escritura del código y para su mejor lectura se deben seguir unas recomendaciones de la guía PEP8. Para conseguir esto, y no estar pendiente de ello, lo podemos hacer automáticamente cuando editemos un archivo escrito en python:

vim ~/.vim/ftplugin/python.vim

setlocal tabstop=4 # tabula con 4 espacios
setlocal softtabstop=4 # numero columnas (= espacios) para tabulador
setlocal shiftwidth=4 # identa con 4 espacios
setlocal textwidth=80 # número de columnas antes del cambio de línea
setlocal smarttab # identa en vez del tabulador al principio de la línea
setlocal expandtab # usa espacios en vez de tabuladores

Para terminar generamos las ayudas, reiniciamos Vim y así podremos ver todas las opciones y mapeos. Dentro de este

:helptags ~/.vim/doc

No hay comentarios: