Snippets de TextMate para Vim
Para el qué aun no haya visto TextMate en acción sólo tiene que curiosear cualquiera de los screencasts de ruby on rails, se trata de una de estas aplicaciones que le cambian a uno el concepto de editor por completo. Dan ganas de comprar una licencia (39$), aunque además tendrás que comprarte algo que funcione con Mac OS X (que tampoco es mala idea :)).
Pero para los vimmeros ha llegado la solución, SnippetsEmu, se trata de un script para vim con muy poco tiempo pero que funciona realmente bien, el autor lo está actualizando con bastante frecuencia y me juego que este va a ser pronto uno de los scripts más cotizados en el top-rated.
 Update: Originalmente este post iba a explicar como usarlo, y algún que otro ejemplo. Pero he estado curioseando el código y no me ha acabado de convencer como está hecho. Funciona muy bien y lo pienso usar, pero aun le falta. En cualquier caso os dejo unas notas de uso para que no perdáis mucho el tiempo:
- Los mappings en vez de con iabbr, se hacen con Iabbr (i-latina-mayúscula)
- los tag del tipo <elem:element>, son tags que tienen valor por defecto. En este caso el nombre del tag es «element» (lo que implica que cualquier cosa que se ponga aquà afecará al resto de tags de tipo
) el «elem» es en si el valor por defecto (si no se escribe nada y se pasa a la siguiente etiqueta se podrán ese valor). - Es muy cómodo añadir un tag vacÃo «<>» al final de la plantilla, o en el último punto, para quedarnos ahà editando después de dar valor a todos los tags.
- <CR> sirve para poner retornos de carro y <TAB> para poner un tab, estas etiquetas son del vim pero son muy prácticas para hacer los mappings.
- Mirad la parte de ejecutar código, es realmente útil ( en etiquetas del tipo <foo:substitute(@z,’.*’,’\U\0′,»g»)>) Donde @z es una variable que tendrá el valor que el usuario pusiera en <foo> previamente.
- Dercargad el script y dejadlo en directorio ~/.vim/plugin/ , los ficheros con los Iabbr dejadlos en directorio ~/.vim/after/plugin/ para que se carguen automáticamente pero siempre después del plugin.
- Si queréis usarlo para editar .rhtml (ruby on rails views) os aconsejo esto para el .vimrc:
- au BufNewFile,BufRead *.html,*.rhtml let g:snip_start_tag = «@»
au BufNewFile,BufRead *.html,*.rhtml let g:snip_end_tag = «@» - De esta forma se usa el sÃmbolo @ en vez de «<>» para marcar los snippets y no molesta con el resto de html
- Por defecto el script funciona saltando con la tecla <S-Del> (shift-del o mayúsculas-del), se puede cambiar escribiendo en el ~/.vimrc  imap TECLA <Plug>Jumper.
A probar 🙂
PD: La intención es hacer en un futuro, cuando tenga tiempo, una versión que funcione con «tab» de forma más similar al textmate. Por lo visto en el código hubo una revisión que comentando y descomentando unas lÃneas se podÃa usar con el tab pero el autor lo descontinuó. En definitiva se deberÃa poder hacer más sencillo y más práctico, ya os contaré cómo es el mundo del scripting en vim.
Vaya, justo ahora me iba a poner a buscarlo. Le pegaremos un vistazo al código para ver qué tal.
No, si el script es más que recomendable. Lo que pasa es que aún le queda un poco (para mi lo de poder usar tab para moverse serÃa sencillamente genial), mientras tanto bindeo la tecla a cualquier otra que sea cómoda y a tirar millas.
Además, he escrito al autor y me ha mandado una versión de prueba para lo del tab, no va bien, pero intentaremos echarle un vistacillo. El vim tiene un problemilla raro raro raro para pillar la posición del cursor correctamente y no inserta bien los tabs donde toca 😀 (vamos, que no se cómo se hace bien)
Probadlo, que pese a todo va bien.
Groucho!!! Mi Ãdolo.
Hola, veo que ya ha pasado mucho tiempo de esta noticia, pero no se si puedas ayudarme, para editar archivos html, puse el truco de usar @ en lugar de en vi ~/.vimrc y mis Snippets en ~/.vim/after/ftplugin/html_snippets.vim, el problema es que al parecer no toma las opciones esas y se va al primer
que paso? se corto el mensaje 😛
*en lugar de «mayor que» «menor que» en ~/.vimrc …
Bueno, el problema es que se va al «mayor que» como por default en lugar de irse al @
Segun leà por ahi creo que es por que carga ~/.vimrc antes que snippetsEmu.vim como podrÃa arreglar eso?
Saludos y gracias por la ayuda! 😀
PD: existe alguna lista de correos de vim o del snippetsEmu en español?
Para arreglar tu problema yo te dirÃa que hagas lo que comento en el post, no se si has probado esto exactamente o no:
au BufNewFile,BufRead *.html,*.rhtml let g:snip_start_tag = “@â€
au BufNewFile,BufRead *.html,*.rhtml let g:snip_end_tag = “@â€
Poniendo eso en el vimrc haces que cuando se cargue un fichero html (BufRead) o se crea un fichero html ( BufNewFIle) se usen esos tags. FÃjate que si quieres editar php por ejemplo usando estos tags tienes que añadirlo a la lista poniendo *.php , etc.
Si siempre quieres usar «@» entonces pon en el vimrc:
let g:snip_start_tag = “@â€
let g:snip_end_tag = “@â€
el vimrc deberÃa cargarse siempre antes que los plugins, y el plugin comprueba si las variables tienen valor antes de ponerle el valor por defecto. MÃrate el código del plugin para saber más detalles, ahora mismo hay un modo compatibilidad con textmate que te puede interesar.
Por último si todo todo todo falla edita el plugin y cambia añade los let … = @ al principio del plugin… 😛
Es un poco tardÃo pero bueno para los que caigan de casualidad por aquà el autor de este plugin ha dejado unos cuantos snippets para ir probándolo en el svn 🙂
http://snippetsemu.googlecode.com/svn/trunk/after/ftplugin/