¿Existe un complemento de autocompletado para vim? ¿Cuáles son mis opciones aquí?
En este momento estoy usando AutoComplPop , pero tiene una mala integración con snipMate que uso y muy lenta en archivos Ruby (incluso <100 líneas).
He visto un par de otros complementos, pero están muertos desde hace al menos más de un año. Entonces, ¿alguna idea?
vim
autocomplete
naquad
fuente
fuente
let g:acp_behaviorSnipmateLength=-1
ver:help autocomplpop
) que se supone que debes agregar a tu .vimrc, ¿la agregaste?Respuestas:
Esta es una vieja pregunta, pero sigo volviendo a ella de vez en cuando con un destello de esperanza que se desvanece, pensando que algún día encontraré la combinación correcta de complementos para darme un autocompletado perfecto en Vim. La búsqueda continúa, pero esta es toda la investigación que he realizado en el transcurso de varios años.
Antes que nada, debes entender que Vim es un editor de texto, no un editor de código. Los editores de código, IDES, son herramientas como el conjunto de herramientas Jetbrains, Visual Studio Code, Eclipse, etc.
Vim fundamentalmente no puede "autocompletar" el código con precisión. El autocompletado requiere la introspección de su código fuente y analizar el AST. Tenga en cuenta que Vim no pudo realizar operaciones asincrónicas hasta que se lanzó Vim 8 en 2016, por lo que tratar de ejecutar cualquier tipo de software de introspección de código en un complemento de Vim sería una pesadilla. Está integrado en la historia del ecosistema de Vim para no hacer esto. Y todos los que intentan hacer esto, como Tern For Vim, son realmente pesadillas para usar.
Lo mejor que puede hacer un editor de texto es fragmentos y completar las mismas palabras / líneas / etc. Si está buscando autocompletar código, debe usar un editor de código, no un editor de texto.
Estas son sus opciones, de las cuales he probado todas:
Dos atajos de teclado útiles son Ctrl- n, que autocompletar una palabra basándose únicamente en las memorias intermedias de corriente que tiene abiertas (sin código de la introspección), y Ctrl- xCtrl- lque autocompletar una línea completa de código si desea duplicar uno. Probablemente sepa Ctrl- xCtrl- f, que completará automáticamente un nombre de archivo, incluida la ruta, en relación con el actual
:pwd
. El complemento de patrón completo puede ser ligeramente útil si no busca con/\v
.Construido en Vim " Omnicompletion " activado por Ctrl- x, Ctrl- o(eso es lo que los autores de Vim quieren que escriba siempre) junto con un montón de complementos específicos de idioma , si existen. Puede
:echo &omnifunc
en un archivo para ver si ya tiene Vimompletion configurado por Vim en su archivo de elección.AutoComplPop para abrir automáticamente el menú Omnicompletion anterior al escribir.
SuperTab, que le permite presionar Tabpara activar la finalización integrada de Vim.
NeoComplCache, que es la finalización de palabras clave (no se especifica cómo se diferencia de la finalización integrada de Vim), una
.vimrc
configuración compleja y NeoSnippet para la finalización del fragmento.Una combinación monstruosa de
exuberant-ctags
yDoctorJS
(un proyecto de Mozilla que ha estado muerto durante un año), TagBar y una cosita de cosecha propia para extraer la finalización de los archivos de etiquetas.SnipMate , un complemento básico de finalización de etiquetas, junto con fragmentos , y descubra por su cuenta cómo agregar fragmentos, ya que es un poco complicado.
UltiSnips junto con UltiSnips-Snippets que son diferentes a los fragmentos anteriores.
Tern para Vim , una biblioteca prometedora que realiza una introspección de código real para obtener el autocompletado correcto. Sin embargo, es defectuoso, muy lento, tiene pérdidas de memoria que bloquean a Vim, y posiblemente es abandonware.
YouCompleteMe , una finalización difusa a medida que escribe que ejecuta un servidor en segundo plano, junto con una función interna para la finalización de fragmentos.
Eclim : un noble intento de ejecutar un servidor Eclipse en segundo plano y decirle a Vim los autocompletados que introspectivamente sobre la marcha. Funciona tan bien como Tern.
Por último, Closetag o delimitMate o autoclose o un bananagram-cosecha propia para el cierre automático de las etiquetas y el paréntesis automáticamente en escribir.
Casi todos los complementos de esta lista entrarán en conflicto con casi todos los demás complementos de esta lista.
YouCompleteMe parece ser el líder del paquete, pero nunca he podido hacer que funcione correctamente con la finalización de la etiqueta, y su finalización de introspección de código aún no ha demostrado ser potente.
Mi opinión personal es que el estado actual del mundo de autocompletado de Vim está en mal estado. Para proyectos pequeños, puede estar bien usando una de las soluciones anteriores. Si se trata de una API simple que puede tener principalmente en su cabeza, la finalización de la introspección sin código probablemente estará bien. Si está lidiando con un proyecto grande, o necesita el beneficio de la seguridad de tipos mientras programa, un IDE completo ( Eclipse , Visual Studio , WebStorm ) se adaptará a usted mucho mejor que Vim.
La desventaja de un IDE, por supuesto, es que ya no tendrás el poder de Vim en tus manos. No he usado un solo IDE que tenga un modo Vim aceptable.
Vim tiene un sesgo de lenguaje moderado hacia lenguajes tipo C sin tipo y, de lo contrario, espera que los usuarios agreguen características específicas del lenguaje como complementos. Desafortunadamente, esto ha llevado a un ecosistema de autocompletado fragmentado. Algunas opciones son decentes, pero nada es perfecto, y rara vez hay un líder mayoritario / mejor práctica.
fuente
Aquí hay uno agradable: YouCompleteMe
YouCompleteMe que hace que el menú desplegable aparezca automáticamente mientras escribe, y admite la selección difusa, por lo que si tiene un identificador llamado
partition_finder
y escribe algo comoptf
mientras edita un archivo C ++, la lista de sugerencias desplegable incluirá ambosprintf
ypartition_finder
porque contienen las mismas letras en el mismo orden. Si tiene una variable llamadamyBrain
, puede escribirbrn
y le sugerirá eso. YouCompleteMe también prioriza las sugerencias basadas en la frecuencia de uso anterior.fuente
Uso neocomplcache con los fragmentos snipmate + snipmate
puedes ver mi vimrc
fuente
Estoy probando necomplecache con neosnippet. Supongo que tendrá una mejor integración ya que ambos son creados por la misma persona.
fuente
Creo que vim tiene uno incorporado llamado OmniComplete. En modo de inserción uso
ctrl+x,ctrl+o
.De lo contrario, puede completar la palabra clave desde el modo insertar con
ctrl+n
. Cuando lo invoque, aparecerá un menú desplegable que muestra las posibles coincidencias de palabras encontradas en el archivo que está editando, así como también de otros archivos que haya abierto. Sigue presionandoctrl+n
para recorrer las opciones. Cuando llegue a la palabra que desea, simplemente continúe escribiendo como de costumbre.Si no puede encontrar la palabra que desea,
ctrl+n
eventualmente saldrá de la lista y podrá seguir escribiendo, o puede presionarESC
y luegobcw
irb
al comienzo de la palabra ofensiva yc
colgar elw
ord al que desea.fuente
<c-x><c-o>
Solo funciona para cosas que vim ha recibido instrucciones explícitas de soporte. Por defecto, creo que solo puede hacer un par de cosas menores, y otras cosas como completar CSS, pero si quieres algo como Eclipse, hay un par de complementos vim que intentan proporcionarte eso.partition_finder
y escribo algo comoptf
mientras edito un archivo C ++, el menú desplegable sugerirá tantoprintf
ypartition_finder
porque contienen las mismas letras en el mismo orden. Si tengo una variable llamadamyBrain
, puedo escribirbrn
y aparecerá. YouCompleteMe también prioriza las sugerencias basadas en la frecuencia de uso anterior. Compruébalo aquí: valloric.github.io/YouCompleteMeBifurqué un nuevo complemento SimpleAutoComplPop del AutoComplPop original. Sin embargo, no estoy familiarizado con ruby o snipMate, puede intentarlo y me alegra recibir algunos comentarios :)
fuente