2011-01-03 7 views
67

Uso ctags, taglist, etc., para completar automáticamente en Vim. Sin embargo, es muy limitado en comparación con Visual Studio intellisense o Eclipse auto-completion. Me pregunto si es posible sintonizar Vim a:Vim: Haciendo la autocompletación más inteligente

  1. Mostrar autocompletar siempre que sea. o -> están escritos. Pero solo después de un texto que podría ser una variable (por ejemplo, evitar mostrar la finalización automática después de un número).

  2. parámetros Mostrar funcionan cuando (se escribe

  3. Detener la eliminación de la lista de terminación automática cuando algunos borrar todos los caracteres después o ->:... Cuando entro en un nombre de variable, a continuación, pulse o -> para buscar para un miembro determinado, con frecuencia tengo que eliminar todos los caracteres que escribo después de. o ->, pero esto hace que Vim oculte la lista de autocompletado. Me gustaría mantenerlo visible a menos que presione Esc.

  4. Autocompletado relacionado: cuando escribo una variable y presiono^X^O, usualmente me muestra todas las etiquetas en el archivo ctags. Me gustaría que muestre solo las etiquetas relacionadas con el vari poder.

Gracias por la ayuda.

EDIT: Algunas personas están votando en esta pregunta, pero ningún organismo parece saber la respuesta. Así que solo quería mencionar que no tiene que proporcionar una respuesta completa; las respuestas parciales a cualquiera de los puntos mencionados también serían buenas.

+0

Las votaciones al alza en la pregunta generalmente significan que la pregunta les resulta útil, clara, concisa o interesante. Si obtienes muchos votos favorables, es probable que se deba a que mucha gente quiere saber la respuesta y no se conocen o no quieren saber más detalles. – jmort253

+1

Gracias. Desafortunadamente, nadie parece saber la respuesta :-(Probablemente deberíamos hablar con los desarrolladores de Vim (o tal vez solo él) para considerar esto seriamente, porque esta es la principal desventaja de Vim. – Rafid

Respuesta

4

Uso vim todos los días, y no conozco ninguna secuencia de comandos existente que pueda hacer esto. Esta acción requeriría la comprensión de las clases y el seguimiento de las variables. someObject-> significa que VIM sabría qué clase es la variable someObject y luego podrá buscar métodos/variables dentro de esa clase.

Escribir guiones para vim es relativamente fácil, aunque como ha comentado, nadie ha respondido todavía. Hasta mi voto.

+0

OK, simplifiquemos eso. es posible verificar cuándo se escriben '.' o '->' y, en consecuencia, mostrar autocompletado? – Rafid

15

Para (1) cuando se trabaja con C++ o C clang complete es una opción muy agradable

8

Para hacer vim desencadenar un cierto comportamiento cuando se pulsa una tecla tendrá que asignar la clave para una función.

Por ejemplo para asignar la tecla . llamar a algún tipo de conclusión, cuando en INSERT modo que tendría que hacer:

:inoremap <expr> <buffer> . MyFunction() 

y luego la función tendría que evaluar el contexto en el que fue llamado y presente una respuesta adecuada para el usuario.

Editar: Esta es la base de cómo clang complete mencionado por @honk funciona.

No estoy seguro si puede personalizar el comportamiento de omnifunc para satisfacer sus necesidades, pero en mi experiencia, nunca fui demasiado lejos. Como dijo @Mikhail, necesitarías hacer un seguimiento de las cosas que en la práctica significan interpretar o incluso ejecutar el código hasta cierto punto.

20

AutoComplPop es lo que necesita.

+1

+1. Eso es lo que uso. –

+0

Para Python no es perfecto, pero es mejor que el predeterminado. :) +1 – Walter

2

Me encantaría tener la misma funcionalidad que usted está buscando y que acaba de llegar a través de un plug-in prometedora:

https://github.com/Shougo/neocomplcache parece que podría ser el nuevo autocomplpop, y parece que funciona bastante bien durante mis pruebas iniciales. .. ahora para configurar la terminación omni para que funcione con scala ~

+0

interesante. Sin embargo, la conclusión automática de Vim es que no tiene en cuenta el contexto. Por ejemplo, si escribo '.' o '->' después de una variable, solo debería ver los miembros de esa variable, en lugar de todas las terminaciones posibles. – Rafid

+0

Esta es la razón por la que terminé usando complementos como VsVim y ViEmu. – Rafid

+0

oh? Tenía la impresión de que eso es lo que hace la omni-terminación ... pero recién comencé mi búsqueda para que funcione este tipo de funcionalidades. Tenía la esperanza de que de alguna manera las ctags y la omnicompleción pudieran hacerlo. He intentado cambiar a un IDE más convencional, pero me sentí tan sucio cuando lo cargo y arrojo todo el proyecto sobre mi cabeza, jaja ... aunque puede llegar a eso ~ – neildaemond

1

En cualquier caso, recomiendo YouCompleteMe (YCM). Se proporciona una coincidencia (difusa) de identificadores de archivo actual, así como la ruta de avance, la integración con los motores externos de finalización, ...

ad 1)
Si te gusta la finalización semántico de eclipse, utilizar eclim a integrar vim con eclipse. (Alernatively utilizar otro motor de semántica para YCM)

ad 2)
Estos 2 juego muy bien juntos por cierto,:. YCM incluso puede proporcionar la función de definición (= lista de parámetros) de la función recientemente terminado!

ad 3)
eso es lo que hace de todos modos YCM

ad 4)
no muy seguro, lo que quiere decir con eso. nunca usé ctags!

P.S .: recomiendo encarecidamente el uso de UltiSnips y Tagbar (y si te gusta UndoTree) además, lo que hace que vim un IDE perfecto para mí.

Cuestiones relacionadas