Autocompletado en Vim

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.

Sin lugar a dudas, algo que posiblemente eches en falta, sobre todo si vienes de otros editores de código, es sin lugar a dudas el autocompletado. Esto no quiere decir que Vim, no tenga su autocompletado. De echo, en las últimas versiones del editor esta funcionalidad ya está dispobible. Sin embargo, a día de hoy, existen complementos que probablemente, le hagan sombra a las características del autocompletado por defecto de Vim. Por supuesto, que dependiendo del uso que le vayas a dar a Vim, con estas caraterísticas, es posible que tengas mas que suficiente. Sin embargo, si este no es tu caso, y quieres exprimir al máximo Vim, en este nuevo capítulo del tutorial abordaré el autocompletado en Vim utilizando un potente complemento como es YouCompleteMe.

Autocompletado en Vim

Autocompletado en Vim

YouCompleteMe

YouCompleteMe es un motor de completado, rápido y potente, utilizando la metodología de la búsqueda fuzzy. Esto de la búsqueda fuzzy, significa que no es necesario que introduzcas la palabra exacta para realizar la búsqueda, sino que por aproximación, también la encontará.

Indicar que YouCompleteMe, no dispone de un único motor de autocompletado en Vim, sino que depedende del lenguaje de programación que estés utilizando. Así, para Python utiliza Jedi, mientras que para Go utiliza Gopis.

Por defecto, no es necesario utilizar ningún atajo de teclado para que YouCompleteMe, te muestre diferentes opciones de completado. Simplemente tienes que ir escribiendo, y conforme lo vas haciendo, te aparece una lista de sugerencias que se va modificando según escribes.

Características

YouCompleteMe tiene algunas características generales y comuntes a todos los lenguajes y sintaxis, y otras que son particulares, a cada uno de ellos. Así, algunas de las características comunes son las siguientes,

  • sistema de autocompletado rápido, incluyendo archivos de etiquetas y elementos sintácticos.
  • las sugerencias van en función del rango
  • sugerencia tanto de archivo como de rutas
  • sugerencias para snippets de UltiSnips. Esto lo podrás disfrutar en el siguiente capítulo del tutorial.

Respecto a las características de autocompletado en función del lenguaje de programación,
indicar que en el caso de Python, tienes las siguietnes,

  • autocompletado semántico
  • comando Goto. Este comando es util para moverte a lo largo y ancho del código. Así por ejemplo si estás sobre un símbolo, una clase, una función, etc, y utlizas este comando, te llevará a la definición del mismo, siempre que esto sea posible. En el cso de que no esté disponible la definición, saltará a la definición.

Instalación

A diferencia de otros complementos que te he comentado hasta el momento, con este voy a hacer una excepción. Este complemento lo voy a instalar directamente desde los repositorios de Ubuntu. Esto es así, porque la instalación no es tan sencilla, como la que has podido ver hasta el momento. Así que, ¿para que complicarnos la existencia?. Abre un terminal, y ejecuta la siguiente instrucción,

sudo apt install -y vim-youcompleteme

Una vez instalado ya puedes empezar a utilizar esta herramienta

Uso general

Antes que nada tienes que tener en cuenta algunos aspectos muy interesantes de este complemento. Lo primero es indicarte que este complemento distingue entre mayúsculas y minúsculas, y las palabras con acentos y sin acentos, de forma inteligente. ¿Como es esto? Esto significa, que si pones una palabra en minúsculas y sin acentos, en ese caso, no distingue entre mayúsculas y minúsculas, y no diferencia acentos. Mientras que si quieres ser mas concreto, tendrás que aproximar mas la palabra que buscas. Fíjate en la siguiente table y comprenderás lo que trato de decirte,

foofóofOofÓo
foo
fóo
fOo
fÓo

Si te fijas cuando utilizas foo, cualquier opción es posible. Es decir, en mayúsculas, minúsculas, con y sin acentos. Mientras que si utilizas mayúsculas o minúsculas, entonces si que distingue.

Otra cuestión interesante es en que posición aparecen los resultados en el autocompletado.Es decir, al escribir una palabra, te aparecerán una serie de opciones para completar. Estas opciones, aparecerán mas arriba o mas abajo, de acuerdo a la puntuación, que el complemento establece. Esta puntuación es bastante compleja, pero, intenta ser lo mas precisa para el usuario. Para que te hagas una idea de la complejidad, indicarte que, por ejemplo, al escribir gcu, aparecerá mas arriba, getCuentaUsuario, que guernicu.

Comandos y subcomandos

Este complemento viene con algunos comandos pensados para compilar y depurar archivos de autocompletado. Lo cierto es que estos comandos, se salen del ámbito de este capítulo del tutorial, pero puedes encontrar más información sobre ellos, en el proyecto de GitHub, cuya referencia encontrarás en el pie de página.

Además de estos comandos, existe uno que si que te será de utilidad. En realidad este comando seguido de sus correspondientes subcomandos. Me estoy refiriendo a :YcmCompleter.

Y ¿que subcomandos tienes a tu disposión?

Los subcomandos dependerán del lenguaje con el que estés trabajando, es decir, es posible que un subcomando funcione en Python, por ejemplo, y no funcione, o no te devuelva nada en JavaScript.

Para utilizar cualquiera de los subcomandos que te menciono a continuación, tendrás que utilizar el comando seguido del subcomando. Por ejemplo,

:YcmCompleter GoToDeclaration

Visto esto, pensarás que para ir a la declaración de un método o función, casi te vale mas la pena moverte a lo largo del código, antes que escribir semejante chorizo. Sin embargo, no te debes preocupar, porque puedes utilizar el autocompletado, para obtener el resultado. Es decir, simplemente tendrías que escribir :Y y pulsar el tabulador, en un par de ocasiones, para encontrar el resultado que buscas.

GoToDeclaration

Si tienes situado el cursor sobre una función y utilizas este subcomando, te llevará hasta la declaración de esa función, de ese método o de esa clase, dependiendo de lo que sea.

Recuerda que puedes utilizar los atajos de teclado Ctrl+i y Ctrl+o para moverte entre las posiciones del cursor. Me explico, si estás sobre la función main, y utilizas este subcomando, te llevará a la declaración de la misma. Una vez consultado o revisada la declaración, si quisieras regresar al punto en el que te encontrabas, simplemente tienes que utilizar el atajo de teclado Ctrl+o, para regresar donde te encontrabas.

GoToDefinition

Este subcomando, funciona exactamente igual que el anterior, pero en lugar de saltar a la declaración de una función salta a su definición.

GoToDefinitionElseDeclaration

Mas de lo mismo, este te lleva a la definición, y en el caso de que no exista, te llevará a la declaración del símbolo, sobre el que tengas situado el cursor en el momento de ejecutar el comando.

GetDoc

Este subcomando abre una ventana mostrando la documentación sobre el símbolo sobre el que estás situado.

Recuerda que, para moverte entre ventanas tienes que utilizar el atajo de teclador Ctrl+w [hjkl] o también Ctrl+w Ctrl+w, para alternar entre las diferentes ventanas. En el caso de que ya hayas terminado de consultar lo que estabas buscando, puedes cerrar la ventana con Ctrl+w c.

GetDocImprecise

El comportamiento es exactamente igual que en el caso de GetDoc, pero no recompila, el archivo sobre el que estás trabajando. Esto, tiene sus ventajas para el caso de que el archivo tenga un tamaño importante, ya que te ahorrará tiempo.

GetType

En este caso, este subcomando te devolverá el tipo de la variable o de la función sobre la que se situa el cursor en el momento de ejecutarlo. De la misma manera que sucede con GetDocImprecise, en este caso, también existe un GetTypeImprecise con el mismo comportamiento, es decir, no recompila, lo que reduce el tiempo de forma considerable, en el caso de archivos de tamaño considerable.

RestartServer

Este subcomando reinicia el motor de autocompletado semántico en el caso de que sea un servidor separado, como sucede para el caso de lenguajes como java, javascript, c, cpp, go, y otros.

Opciones de configuración

Respecto a todas las posibilidades de configuración que te ofrece esta herramienta de autocompletado, te recomiendo que le des un repaso en la propia documentación del complemento. Son muchas posibilidades, y el objeto de este capítulo del tutorial sobre Vim es darte una visión general de lo que ofrece este complemento, mas que entrar en detalle en la configuración del mismo.

Este complemento es perfecto para utilizar en conjunción con el complemento de snippets, que verás en el próximo capítulo de este tutorial.


Más información,

Imagen de portada de Amanda Jones en Unsplash

1 comentario en “Autocompletado en Vim

  1. RU
    Rubén hace 2 años

    a pesar de haber instalado como dices el diccionario español y me resalta las palabras mal escritas, si intento poner está abbreviation en mi _vimrc
    iab decíemtros decímetros
    no me corrige la palabra
    Saludos

Deja una respuesta

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