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.
Si no conoces el concepto de snippet indicarte que no es ni mas ni menos una pequeña porción de texto que vas a utilizar en repetidas ocasiones. Es importante resaltar esto de las repetidas ocasiones, porque esta es precisamente la gracia de los snippets en Vim, y en cualquier otro editor, y es que ahorran mucho tiempo. Por supuesto, como cualquier otro medio que finalmente te ahorre productividad, necesita una pequeña inversión, para conocerlo, mejorarlo e integrarlo en tu flujo de trabajo diario. Con esto de mejorarlo, me refiero, básicamente a que introduzcas tu configuración personal, para adaptarlo por completo a tus necesidades.
Si te fijas, he escrito pequeña porción de texto y no de código. Esto es así, porque los snippets, no son exclusivamente para los desarrolladores e implementadores de código, sino que lo puede utilizar cualquier persona que simplemente no quiera repetir lo mismo una y otra vez.
Así, cualquier editor de código que se precie, dispone de alguna funcionalidad para el uso de los snippets y por supuesto, Vim no podía ser menos. Actualmente yo estoy utilizando UltiSnips, y es precisamente, el complemento que quiero tratar, en este nuevo capítulo del tutorial sobre Vim.
Snippets en Vim
Según los propios desarrolladores de este complemento, UltiSnips, es la solución definitiva para utilizar snippets en Vim. Y te tengo que decir, que a mi me ha convenido.
UltiSnips, no solo te permite insertar snippets en Vim, sino que también te permite crear los tuyos propios para ser mas rápido y productivo. Pero, la gran ventaja de este gestor de snippets, es que crear un snippet es algo realmente sencillo, simple y, sobre todo, intuitivo. Prácticamente, queda integrado en tu flujo normal de trabajo, de forma que, la diferencia de tiempo entre introducir el texto directamente, y crear el snippet, e introducir el texto, es insignificante. Eso si, a menos que seas, un perfeccionista…
Me explico, en muchas ocasiones, el problema de los snippets en Vim, y en cualquier otro editor, es que resulta tan tediosa la creación de uno de ellos, que terminas por no hacerlo. Prácticamente, esto, sucede en cualquier ámbito de la vida. Cuantas veces te has sorprendido a ti mismo, diciendo eso de me cuesta mas explicarlo, que hacerlo yo mismo. Pues, esto es exactamente lo mismo. Con la diferencia de que UltiSnips te lo pone tan sencillo, que resulta prácticamente igual, con la ventaja que para las próximas ocasiones, ya lo tienes resuelto.
Instalación de UltiSnips
De nuevo para la instalación de este complemento de Vim, vuelvo a utilizar el gestor de complementos Plug, porque me va a permitir seleccionar con que tipo de archivos trabajaré.
Así añadiré las siguientes líneas al archivo de configuración de Vim, ~/.vimrc
,
Plug 'SirVer/ultisnips', {'for': ['sh', 'python', 'markdown']}
Plug 'honza/vim-snippets', {'for': ['sh', 'python', 'markdown']}
Sin embargo, mi objetivo es utilizarlo también con el complemento que te indiqué en el capítulo anterior del tutorial de Autocompletado en Vim. Porque es en combinación con ese complemento donde puedes sacar el máximo partido. Así, para no tener ningún problema, te incluyo un tercer complemento,
Plug 'ervandew/supertab'
Una vez añadidos todos estos complementos, simplemente tienes que ejecutar el comando :PlugInstall
y dejar que la magia de Vim haga el resto.
El siguiente paso es modificar el archivo de configuración con las siguientes líneas para conseguir que todo case perfectamente,
let g:SuperTabDefaultCompletionType = '<C-n>'
let g:SuperTabCrMapping = 0
let g:UltiSnipsExpandTrigger = '<tab>'
let g:UltiSnipsJumpForwardTrigger = '<tab>'
let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
let g:ycm_key_list_select_completion = ['<C-j>', '<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-k>', '<C-p>', '<Up>']
let g:UltiSnipsEditSplit="vertical"
let g:UltiSnipsListSnippets="<c-t>"
Uso y funcionamiento
A partir de aquí trabajar con los snippets es realmente sencillo. Tan solo tienes que utilizar el tabulador
como haces con el autocompletado normal para que te ayude a insertar algún snippet.
Con la definición anterior, puedes de forma sencilla ir pasando entre los diferentes elementos de tu snippet.
¿Que snippets en Vimtengo a mi disposición?. Indicarte lo primero, que los snippets, serán función del tipo de archivo con el que estés trabajando. Es decir, los snippets para un archivo de Python, no tienen que ser los mismos que los snippets para un archivo markdown.
Si quieres tener una lista completa de todos los snippets en Vim disponibles, tienes que utilizar el atajo de teclado Ctrl+t
, en el caso de que hayas utilizado la configuración que te he indicado anteriormente. Por defecto, la configuración recomendada para este complemento es Ctrl+tab
, sin embargo, al utilizarla con el complemento de autocompletado, es necesario modificarlo para evitar conflictos.
Crear tus propios snippets en Vim
Por supuesto, que una de las ventajas de esto de los snippets, es precisamente tener la posibilidad de crear los tuyos propios. Y además de crearlos fácilmente. Así para que te hagas una idea de lo sencillo que es crear tu propio snippet en Vim, un ejemplo. El primer paso es utilizar el comando :UltiSnipsEdit
. Esto te llevará a una ventana donde encontrarás los snippets, que hayas creado anteriormente.
Por ejemplo, podrías hacer un snippet como el que te muestro a continuación, como comienzo de todos tus correos,
snippet hola "Comienzo de email"
Hola ${1:Lorenzo}
$0
endsnippet
La primera de las líneas del snippet contiene su definición, que básicamente consiste en el código que utilizarás para llamar al snippet, y un comentario para que sepas que es lo que hace este trozo de código. A partir de aquí se trata de comenzar a escribir todo lo que quieras que se incluya en tu snippet. Teniendo en cuenta que $<numero>
es un punto de parada para cada salto que realices con el tabulador. Empezando por $1
y teniendo en cuenta que con $0
terminarás todos los saltos.
Además tienes que tener en cuenta que si repeties alguno de estos $<numero>
significa que tendrán el mismo valor. Además si añades una definición, como por ejemplo la que he indicado anteriormente, ${1:Lorenzo}
, por defecto, en ese salto, incluirá Lorenzo
, con la posibilidad de sustituirlo cuando lo consideres.
Estos snippets en Vim, que tu has definido de forma totalmente personalizadas los puedes encontrar en el directorio ~/.vim/UltiSnips/
. Los encontrarás en diferentes archivos, un archivo por cada tipo. Es decir, para los snippets de html
encontarás un archivo llamado html.snippets
, para los de markdown
, encontrarás un archivo llamado markdown.snippets
, y así sucesivamente.
No es necesario que te diga que tienes snippets para la creación de snippets en Vim; algo realmente meta. En este sentido, cuando vayas a crear tu primer snippet, conforme te he indicado anteriormente, tan solo tienes que escribir snip
y pulsar tab
, y tendrás la completa definición de tu primer snippet, que por supuesto podría ser un Hola mundo
,
snippet holamundo "description"
Hola mundo!!!
$0
endsnippet
Esto no es mas que la punta del iceberg de las posibilidades que te ofrece UltiSnips para la creación de tus propios snippets. Puedes añadir otras
muchas características, como puede ser introducir hora, o fecha, o modificar parte del texto que estás escribiendo justo en ese mismo momento.
Te recomiendo le des un dediques un tiempo a revisar toda la documentación que tiene UltiSnips, para sacar el máximo provecho, si lo que quieres es crear tus propios snippets.
Más información
Imagen de portada de Chris Ried en Unsplash