VIM Usage (Tips & Tricks) - Chapter V

Entramos en el quinto y último capítulo del tutorial sobre el editor Vim. Esto no quiere decir que no haya más cosas que contar sobre este editor, que todavía ofrece muchas más funcionalidades, sino que a mi parecer estas que he desarrollado a lo largo del tutorial son las más útiles. De todos modos siempre estoy abierto a sugerencias y, si deseáis que desarrolle alguna en concreto, sabéis cómo y dónde localizarme. Entramos en materia...

Uso de Plantillas y Abreviaturas
Vim, entre otras muchas funciones, cuenta con su propio lenguaje script que nos permite automatizar tareas. En este caso veremos de qué forma podemos asociar diversas acciones para un fichero dependiendo de la extensión del mismo. Para ello creamos el directorio templates, en el que almacenaremos plantillas para cada tipo de fichero, dentro de nuestro directorio vim.

export VIMHOME=$HOME/.vim
Sería conveniente establecer la variable de entorno VIMHOME que nos indicará la ruta al directorio .vim
mkdir $VIMHOME/templates
Creamos el directorio templates
vim html.tpl
Creamos una plantilla para nuestros ficheros HTML
< html >
< head >
< title >< /title >
< meta name="generator" content="" />
< meta name="author" content=""/>
< /head >
< body >
< p >< /p >
< /body >
< /html >
Incluimos la estructura básica de un fichero HTML (He tenido que incluir espacios en las etiquetas HTML porque se las cepilla el editor
:autocmd BufNewFile *.html 0r $VIMHOME/templates/html.tpl
Incluimos la línea anterior en el fichero .vimrc para enlazar la plantilla a los ficheros nuevos que creemos con extensión .html
:autocmd BufNewFile * silent! 0r $VIMHOME/templates/%:e.tpl
Mediante la línea anterior enlazaríamos cualquier fichero por su extensión a la plantilla correspondiente, es decir, que si creamos la plantilla php.tpl en el directorio templates se abriría automáticamente al crear un nuevo fichero con extensión php

Por otro lado podemos incluir etiquetas dentro de nuestras plantillas para delimitar las zonas editables de la misma y, de este modo, desplazarnos directamente a las mismas, ahorrando tiempo. Para ello utilizamos un conjunto de caracteres determinado y le indicaremos a Vim el modo de reconocerlos como etiquetas. Después crearemos un atajo de teclado para desplazarnos entre las etiquetas:

< html >
< head >
< title ><+TITLE+>< /title >
< meta name="generator" content="<+GENERATOR+>" />
< meta name="author" content="<+AUTHOR+>" />
< /head >
< body >
< p ><+CONTENT+>< /p >
< /body >
< /html >
Este sería el código de nuestra plantilla para los ficheros HTML. Hemos determinado que nuestras etiquetas tendrán el formato <+ETIQUETA+> pero podemos escoger el que más nos interese
:match Error /<+.\++>/
Podemos resaltar las etiquetas para localizarlas mejor, por ejemplo, utilizando la combinación de colores Error o cualquier otra
nnoremap /<+.\{-1,}+>< cr >c/+>/e< cr >
Creamos el atajo de teclado CTRL+J mediante el cual nos deplazaremos por las etiquetas si estamos en modo comando (ESC)
inoremap /<+.\{-1,}+>< cr >c/+>/e< cr >
Creamos el atajo de teclado si estamos en el modo insertar (I)

En el mismo atajo de teclado incluimos la sentencia que elimina la etiqueta y posiciona el cursor de modo que podemos comenzar a agregar texto a nuestro fichero.

Nota: No olvidéis quitarle los espacios a la etiqueta cr

Otra forma de automatizar el proceso de edición de nuestros ficheros es añadir abreviaturas para los comandos más utilizados, por ejemplo, la estructura de un bucle for:

:iabbrev for( for (x=0;x< cr >}
Creamos la abreviatura for( que será sustituida por la estructura de un bucle for
:iabbrev for( for(!cursor!;<+++>;<+++>){< cr ><+++>< cr >}< Esc >:call search('!cursor!','b')cf!
Del mismo modo que hicimos con las plantillas le podemos agregar etiquetas a nuestra abreviatura para desplazarnos por ellas

Para automatizar el proceso de cargar las plantillas y las abreviaturas para cada tipo de fichero que vayamos a crear, podemos generar otros ficheros en los que almacenaremos las abreviaturas y luego indicarle a Vim que los cargue, al igual que hacía con las plantillas.

function! LoadTemplate(extension)
silent! :execute '0r $VIMHOME/templates/'. a:extension. '.tpl'
silent! :execute 'source $VIMHOME/templates/'.a:extension.'.patterns.tpl'
endfunction
Editamos el fichero .vimrc y agregamos la función anterior, que sustituirá al comando que incluimos anteriormente. Esta función carga la plantilla y el fichero de abreviaturas correspondiente al tipo de extensión del fichero que deseamos crear. Para ello simplemente debemos crear un fichero html.patterns.tpl en el que incluiremos las abreviaturas para los ficheros de tipo html, por ejemplo.
:autocmd BufNewFile * silent! call LoadTemplate('%:e')
Por último incluimos la llamada a la función dentro del mismo fichero .vimrc que se ejecutará siempre que vayamos a crear un fichero nuevo

Reconocimiento de TAGS
En la Web de Vim disponemos de muchísimos scripts de gran utilidad. Entre ellos cabe destacar xml.vim que añade a Vim nuevas funcionalidades a la hora de editar lenguages de marcado tales como XML y HTML.

Lo podemos descargar desde http://www.vim.org/scripts/script.php?script_id=1397

La instalación es sencilla:

mkdir $VIMHOME/plugin
Creamos el directorio plugin si no lo hubiéramos creado ya
cp xml.vim $VIMHOME/plugin
Copiamos el script en dicho directorio
vim $HOME/.vimrc
Editamos el fichero .vimrc y agregamos las instrucciones siguientes:
set nocompatible
Desactivamos el modo de compatibilidad de Vim con Vi para habilitar nuevas funcionalidades que no están disponibles para Vi como el Undo ilimitado
syntax on
Activamos el resaltado de sintaxis por tipo de fichero
set textwidth=80
Establecemos el ancho de la línea de texto a 80 caracteres
set autoindent
Activamos la identación automática
source /usr/share/vim/vim72/macros/matchit.vim
Activamos la función de desplazamiento entre las tags mediante la tecla %
:filetype plugin on
Activamos el plugin

Pues hasta aquí la saga de lecciones sobre este potente y versátil editor. Espero que os haya resultado de utilidad. Si os habéis encontrado con algún problema al probar los ejemplos propuestos, me lo podéis comentar para corregirlo. Así como si deseáis aportar algo nuevo o profundizar en algún aspecto solo tenéis que pedirlo.

Un saludo.

Os dejo un par de chistes que me he encontrado por ahí.

" I did a survey of new users to linux and watched their average usage of VIM when they used it for the first time. These are my results of the average user using vim for the first time:

^C^C^X^X^X^XquitqQ!qdammit[esc]qwertyuiopas­ dfghjkl;:xwhat "

Real Programmers... http://xkcd.com/378/

Comentarios

cioran:

Saludos, gracias por la info, algo impresionante y justo lo que necesitaba, con gusto leo estos aportes, ojala continues

amatas:

Me acabo de leer los 5 posts de VIM, cojonudo tío.

Recomiendo esta charla realizada por el principal desarrollador de vim:

http://video.google.com/videoplay?docid=2538831956647446078

rteijeiro:

Thanks...
Al tío este después de hacer todo lo que hace todavía le queda tiempo para respirar??...

In a world without fences and walls, who needs gates and windows? (Proverbio Opensource)

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.