Plantillas en Vim

Vim, un editor atemporalVim, un editor atemporal

Este es uno de los capítulos del tutorial Vim, un editor atemporal. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

No se cuantas veces me he visto a mi mismo escribiendo la licencia en alguno de los archivos de una aplicación o de un script. Pero no solo esto, también me he visto en multitud de ocasiones escribiendo o copiando y pegando, una y otra vez, la estructura de un archivo HTML. Pero, sin lugar a duda, lo mas grave del caso es que durante este tiempo, he sido totalmente consciente de que existía la opción de utilizar plantillas. De hecho, dependiendo del IDE que haya utilizado en cada momento, he tenido diferentes plantillas para no tener que repetir una y otra vez las mismas operaciones. Así que ha llegado el momento de utilizar las plantillas en Vim.

Plantillas en Vim

Plantillas en Vim

¿Porque utilizar plantillas en Vim?

Seguramente te estés preguntando porque utilizar plantillas en Vim, y aquí te tengo que dar dos razones fundamentales. La primera y que no tiene discusión alguna es por no repetir una y otra vez lo mismo. Por ejemplo, en mi caso particular, lo que suelo hacer al escribir código para Python, es añadir las línea referentes al ejecutable de Python a utilizar y la codificación a utilizar, así como la licencia. Esto hacerlo una y otra vez, aunque lo haya estado haciendo durante los últimos tiempos, así que… plantillazo al canto.

La otra razón se refiere a porque utilizar plantillas en Vim frente a otros IDES. Aunque esto dependerá de como se utilicen, o mejor dicho, el formato en el que se guarden, en esos otros IDES. La gran ventaja de hacerlo con Vim es porque estas plantillas van sin formato, en texto plano.

El texto plano, tiene innumerables ventajas frente a otras soluciones, entre las que te tengo que citar, que les puedes aplicar control de versiones y la segunda, y quizá mas importante, es que no dependes de ningún software. Lo podrás utilizar siempre, no dependerá de nada ni de nadie.

¿Como utilizar las plantillas en Vim?

He elegido dos opciones de todas las que podido ver a lo largo y ancho del proceloso mundo de Internet. La pirmera de las opciones es utilizar un complemento. La segunda de las opciones, es añadir unas pocas líneas de código a tu archivo de configuración y personalizarlo.

Por supuesto que todo tiene sus ventajas e inconvenientes, mientras que utilizar un complemento puede que te parezca lo más cómodo, la personalización del archivo de configuración es realmente sencilla, al menos en este caso, y te da algunas de las características que te ofrece el complemento. De esta forma, te he puesto en una compleja tesitura. Ya te adelante que yo me he decantado, como seguramente ya te habrás imaginado, por la segunda.

1. Utilizando un complemento

La ventaja de un complemento está clara, no te tienes que preocupar de programarlo tu mismo, y lo que es mejor, no te tienes que preocupar por mantenerlo. Y creo que precisamente en el punto de mantenerlo es donde yo veo mas problema. Vim, como cualquier otra aplicación que se precie, va modificándose con el paso del tiempo. Llegan nuevas versiones dotando a Vim de nuevas funcionalidades, y declarando obsoletas otras. Aquí es donde nos podemos ver involucrados, en la obsolescencia, podemos estar utilizando un método que en una nueva versión sea declarado como obsoleto.

Sea como fuere, en el caso de que quieras utilizar un complemento mi recomendación es vim-templates. Este complemento te permitirá utilizar las plantillas sin que te tengas que preocupar de absolutamente nada.

Instalación

Yo utilizo vim-plug para gestionar los complementos en Vim, con lo que la instalación es tan sencilla como añadir en el archivo ~/.vim/vimrc la siguiente línea junto al resto de complementos,

Plug 'tibabit/vim-templates'

Por supuesto tienes que proceder a la instalación como de costumbre, que en mi caso se completará con PlugInstall

Configuración

A continuación tienes que añadir las siguientes líneas, adaptándolas a tus necesidades,

let g:tmpl_search_paths = ['~/.vim/templates']
let g:tmpl_author_name = 'Lorenzo Carbonell <a.k.a. atareao>'

La primera de las líneas es obligatoria, porque te permite identificar donde se encuentran las plantillas, pero la segunda es opcional. Esta segunda lo que permite es reemplazar {{NAME}} por el contenido de tmpl_author_name. Además de esta también existen otras variables como tmpl_author_hostname y tmpl_author_email, por citarte algunas. Puedes encontrar el listado completo de variables y reemplazos en vim-templates.

Creando tus plantillas

Las plantillas deberán tener el formato <extensión-del-archivo>.template. Así, por ejemplo, en el caso Python sería, py.template.

Dentro de la plantilla, utilizando las variables y reemplazos comentados en el apartado anterior, puedes configurarla de forma que mejor se adapte a tus necesidades.

2. Solo con tu archivo de configuración

Para esta opción, lo primero que tienes que hacer es crear el directorio en el que se encontrarán tus plantillas, que por convención lo llamaré ~/.vim/templates.

Dentro de este directorio tienes que incluir todas y cada una de las plantillas que quieras utilizar. El formato de las plantillas <extensión>.tpl por ejemplo para Python sería py.tpl. La extensión es tpl de template. Pero, este es el formato que he elegido yo, tu puedes seleccionar el que mas te guste o el que mejor se adapte a tus necesidades, por supuesto.

El siguiente paso es añadir las siguientes líneas al archivo de configuración, que en mi caso es ~/.vim/vimrc.

augroup templates
    au!
    let g:template_name = 'Lorenzo Carbonell <a.k.a. atareao>'
    autocmd BufNewFile *.* silent! execute '0r $HOME/.vim/templates/'.expand("<afile>:e").'.tpl'
    autocmd BufNewFile * %s/{{YEAR}}/\=strftime('%Y')/ge
    autocmd BufNewFile * %s/{{NAME}}/\=template_name/ge
    autocmd BufNewFile * %s/{{EVAL\s*\([^}]*\)}}/\=eval(submatch(1))/ge
augroup END

Esto es lo siguiente,

  • BufNewFile esto se hace cada vez que se edita un nuevo archivo
  • silent! execute no se muestran errores en caso de que falle. Esto es así, porque fallará en cada ocasión que no encuentre el archivo <extension>.tpl
  • 0r lee el archivo y lo inserta al inicio del nuevo archivo que estás editando
  • expand("<afile>:e") obtiene la extensión del archivo que estás editando

A continuación tienes algunos reemplazos. El primero para incluir el año de creación del archivo, el segundo para poner el autor del archivo. En este caso, he utilizado una variable global, por comodidad, pero, como te puedes hacer idea, esto no sería necesario ni mucho menos.

El tercero de los reemplazos es mucho mas general, porque lo que te hace es reemplazar y evaluar el contenido de lo que se encuentre. Por ejemplo, en tu plantilla podrías tener algo como esto,

{{EVAL strftime('%Y')}}

Así el tercer reemplazo evalúa strftime('%Y') y lo reemplaza. Esto te valdría incluso para reemplazar los anteriores. Con uno solo podrías tenerlo todo resuelto, pero creo que de esta forma queda mucho más cómodo.

Con estas pocas líneas de código tengo exactamente la misma funcionalidad que con el complemento anterior. No quiero decir, que lo reemplace por completo, sino que a mi me da la funcionalidad que yo estaba buscando.

Conclusión

Como ya te habrás imaginado, yo me he quedado con esta segunda de las opciones, me parece realmente simple y limpio. Y no creo, que por el momento, sea excesivamente complejo de mantener.


Más información,

Imagen de portada de Anomaly en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *