7 de Noviembre de 2012 · 5 min de lectura
En APSL no hay un editor de texto preferido para trabajar con Python y Django. Al final estamos trabajando con texto, de modo que mientras el editor cumpla con unos requisitos mínimos personalmente no tengo nada que objetar a que cada uno utilice el editor que vle dé la gana: netbeans, vim, geany, kate, gedit, ...
A partir de aquí ya entran las preferencias de cada uno. Por mi parte prefiero un editor que cargue rápido y que pueda utilizar siempre, tanto si estoy trabajando sobre el ordenador de sobremesa, sobre un portátil ligero o bien conectado a un ordenador remoto.
Dadas estas preferencias, de la lista que he citado anteriormente ya podemos descartar netbeans por sus grandes necesidades de memoria y procesador y aunque el resto son editores ligeros y rápidos, no cumplen con la última condición de poder ser utilizados en una sesión remota.
Dominar al máximo el editor que utilizas para la programación diaria y poderlo personalizar resulta una herramienta de productividad importante, y Vim en este aspecto es extraordinario, mediante configuración podemos cambiar el comportamiento de las teclas, añadir plugins para que realcen determinadas tareas, crear macros, alias para los textos más usados ...
En su día empecé a personalizar vim a mi gusto a partir del artículo de Johtn Anderson Turning Vim into a modern Python IDE, donde nos va recomendando una serie de personalizaciones para ir tuneando nuestro editor.
A partir de esta configuración he ido recopilando mi propio conjunto de plugins y recursos que podéis encontrar en Google code. En esta recopilación he podido personalizar Vim hasta unos niveles que lo convierten en mi editor favorito para la gran mayoría de tareas, veamos algunos:
Repositorio: mattn/zencoding-vim · GitHub
Zencoding Vim nos permite utilizar la sintaxis de zencoding para escribir código html muy rápidamente. Un texto como
div.content > h2.hello
se convierte tras pulsar ctrl+y, en una estructura html completa.
<div class="content"> <h2 class="hello"></h2> </div>
Y todavía hay más, añadiendo
|e
a nuestro texto nos escapará los carácteres, permitiéndonos escribir este artículo en html. Este plugin hace mucho más sencillo escribir html y trabajar con estructuras anidadas de tags. Ha sido una de las últimas incorporaciones al proyecto y le estoy sacando mucho partido.
La documentación es excelente, y tambíen podéis encontrar un magnífico tutorial en kusnier.net
Repositorio: https://github.com/kien/ctrlp.vim
Este es otro de los plugins que me ha sorprendido gratamente. Pulsando Ctrl+P el pluguin nos permite ir viendo los archivos que coinciden con el texto que vamos tecleando. Es ideal cuando estamos trabajando en un proyecto y queremos cargar un nuevo archivo.
Vim tiene un buen autocompletado de nombres de archivo por defecto, pero este plugin además busca por coincidencias parciales, permitiéndonos localizar archivos dentro de una estructura de directorios compleja.
Una vez mostrados los archivos con ctrl+z podemos marcar los que queramos abrir y con ctrl+o abrirlos.
Repositorio: Gundo - Visualize your Vim Undo Tree
Otra pequeña maravilla. ¿Te has despistado y no te acuredas de qué habías tocado los útlimos minutos? Vim te ofrece el comando earlier y later para poder ir adelante y atrás en los cambios, pero Gundo va un poco más allá, mostrándonos en una ventana la lista de cambios y permitiéndonos ver las diferencias respecto al código actual.
Seleccionando uno de estos cambios podemos mostrarlo en la ventana de edición y por tanto tener un control completo de lo que hemos ido modificando.
En mi configuración activo esta característica con ,g
y se puede ocultar con
q
Repositorio: davidhalter/jedi-vim · GitHub
Jedi-vim añade caraterísticas avanzadas de autocompletado de código para Python. Una vez añadido el plugin al ir escribiendo código y pulsar el punto vim nos ofrecerá la lista de métodos y atributos del objeto, junto con una descripción de su documentación asociada.
En algunas configuraciones y para archivos muy largos a veces ralentiza el editor. Si es así basta con desactivar la inicialización con
let g:jedi#auto_initialization = 0
Este plugin añade varios mapeos de teclas que se pueden configurar a nuestro gusto. Uno de ellos, que sirve para ir a la definición de una función u objeto está mapeada a leader+g que en mi caso se corresponde con
,g
que es la misma combinación que utilizo para el undo.
Así que un poco de mágia de vim y todo arreglado, en el .vimrc se añade
let g:jedi#goto_command = "f"
Repositorio: scrooloose/syntastic · GitHub
Syntastic es un plugin que nos permite detectar los errores de sintaxi utilizando diversos programas auxiliares, mostrando además los errores en la propia pantalla de Vim.
Para Python se puede utilizar flake8, pyflakes, pylint como herramientas,en mi caso utizo flake8, y por tanto, debemos tener instalado este programa vía
sudo pip install flake8
Repositorio: tpope/vim-surround · GitHub
Surround es un plugin que nos permite cambiar cualquier elemento que "envuelva" al texto: cambiar comillas dobles a comillas simples o viceversa, eliminar un tag de html, o añadirlo.
El plugin es muy potente pero también cuesta acostumbrarse a que lo tienes. Lo que más utilizo es el cambio de comillas con
cs"'
para cambiar de comillas dobles a comillas simples.
ds'
para eliminar unas comillas, o bien en modo visual de Vim podemos seleccionar un texto y pulsar S e introducir el elemento que queramos utilizar para utilizarlo como marcador: comillas, símbolo del comentario o un tag completo de html.
Repositorio: fholgado/minibufexpl.vim · GitHub
Nos permite ver los buffers que tenemos abiertos en Vim como si fuesen tabs, de modo que podemos passar de un buffer de edición a otro sin preguntarnos primero a qué buffer queremos ir, ya que los tendremos siempre en pantalla y sin que ocupen mucho espacio.
Repositorio: scrooloose/nerdcommenter · GitHub
NERDCommenter nos permite añadir y eliminar las marcas de comentarios muy rápidamente. Para la configuración que tengo de Vim las combinaciones que más utilizo son
,cs para añadir un comentario a la línea actual ,ci para cambiar el estado del comentario ,cl para añadir la marca de comentario alineada a la izquierda
Repositorio: scrooloose/nerdtree · GitHub
Nerdtree nos presenta un navegador de ficheros en el que podemos seleccionar qué queremos cargar de manera visual.
Es un navegador muy completo pero la verdad es que raramente lo uso, ya que para la edición habitual el plugin ctrlP es mucho más rápido.
En mi configuración, además está dispuesto que el navegador se cierre automáticamente al seleccionar el archivo de edición, ya que me encontré que este era mi comportamiento habitual cuando lo utilizaba.
Repositorio: SirVer/ultisnips · GitHub
Por último uno de mis plugins preferidos: un gestor de snippets con un pequeño lenguaje que nos permitirá definir plantillas para nuestras estructuras de programación más habituales. He ido creando las que más utilizo tanto en Python como en Django y para las plantillas, completando las que ya vienen por defecto.
Por ejemplo
sbu
seguido de un tabulador no insertará la cabecera del shebang de Python (si editamos un archivo .py), si estamos creando un modelo Django,
char
más tab nos da la plantilla para un campo charfield, o
model
que nos guiará en la creación de la estructura del modelo.
La librería de snippets es muy amplia y resulta muy sencillo crear nuevas plantillas gracias a los tutoriales y documentación que acompañan al plugin.
Con esto acabo la lista de los plugins más importantes que utilizo. Como podréis ver en .vimrc del repositorio hay una gran cantidad de personalizaciones orientadas a mejorar cómo Vim trabaja con Python y a hacerme la vida más sencilla. La gran mayoría son fruto de configuraciones que he visto aquí y allá y que he ido incorporando con el tiempo. El archivo está bastante comentado y quien tenga interés en verlo está a su disposición. Espero que le saquéis todo el partido a Vim que podáis y que os divirtáis en el proceso. La verdad es que cuesta empezar, pero una vez ya tienes los comandos básicos es una de las mejores herramientas de programación que existen.