Vim Word Fuzzy Completion.
El último tiempo estuve probando un editor de texto que para mi es bastante nuevo: sublime2.
Esta genial aplicación tiene muchísimas características interesantes como es un minimap del texto, a la derecha sobre el que se puede navegar, apertura de archivos utilizando fuzzy search sobre el path actual, auto completado 'fuzzy' con la tecla <Tab>, búsqueda por símbolos con el caracter @, indentado de texto muy inteligente, etc.
Inmediatamente me despertó la curiosidad sobre algunas funcionalidades que vim no trae de cajón, y que muy tranquilamente podría tener:
1- Apertura de archivos utilizando fuzzy search.
2- Completado 'fuzzy' de palabras (ej: si en mi archivo tengo la palabra futurama, yo escribo frutur, presiono <Tab> o alguna combinación, y el editor de texto debería sugerirme 'futurama').
El caso (1) lo resolví con el excelente complemento 'CommandT' para vim: enlace.
Sin embargo, me llamó la atención que no pude encontrar una solución para el caso (2), ya que es una funcionalidad relativamente fácil de implementar en un plugin.
Dado lo anterior, me senté unas horas de una tarde y lo resolví creando el plugin 'Word Fuzzy Completion': enlace (mi primer aporte a la comunidad de usuarios vim), el código fuente del plugin está alojado en github: enlace.
El funcionamiento del plugin es sencillo, existen dos combinaciones de teclas para utilizarlo:
"<Ctrl-X><Ctrl-U>" o uno mas corto "<Ctrl-K>".
Suponiendo que estamos editando un buffer que contiene lo siguiente:
-------- buffer ----------
The simpsons
Futurama
Back to the future
Features
-------- buffer ----------
Si escribimos:
1) sminsons<Ctrl-k>
La palabra será cambiada a:
simpsons
2) smi<Ctrl-k>
La palabra cambiará nuevamente a:
simpsons
3) furure<Ctrl-k>
La palabra cambiará a:
La palabra será cambiada a:
simpsons
2) smi<Ctrl-k>
La palabra cambiará nuevamente a:
simpsons
3) furure<Ctrl-k>
La palabra cambiará a:
future
4) Furu<Ctrl-k>
Se mostrará el listado de palabras similares:
Fururama
Future
Features
4) Furu<Ctrl-k>
Se mostrará el listado de palabras similares:
Fururama
Future
Features
La implementación del plugin está escrita en python, y utiliza el algoritmo de Distancia de Levenshtein para medir distancias entre las palabras del buffer actual.
Se que hay muchas cosas para mejorarle, la primera es cambiar la combinación de teclas '<Ctrl-K>' ya que está pisando una funcionalidad de vim, y la segunda es el buscado de palabras en todos los buffers abiertos. Cuando esté con un poco de tiempo libre lo implementaré.
Enlaces:
Vim: enlace.
CommandT Plugin: enlace.
Distancia de Levenshtein: enlace.

0 comentarios:
Publicar un comentario en la entrada
Suscribirse a Enviar comentarios [Atom]
<< Página principal