¿Es posible tener nombres de función de autocompletar vim, variables, etc. cuando se usa para programar?

56

Muchos IDEs completan automáticamente los nombres de funciones, variables, nombres de métodos, etc. a medida que el usuario escribe. Los mejores completan los nombres basados ​​tanto en la biblioteca incorporada del lenguaje como en lo que ya se ha definido en otros archivos del mismo programa.

Por ejemplo, mientras escribo el siguiente programa de Python:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

la línea eatFse mostrará automáticamente eatFood()como una opción de autocompletar disponible.

¿Vim tiene esta capacidad? Si es así, ¿cómo puedo habilitarlo?

drs
fuente

Respuestas:

42

Hay muchos sabores diferentes de autocompletar en vim. Una forma podría ser usar SuperTab . Esto proporciona una manera de usar la finalización de pestañas en más o menos tiempo. Esto le permitiría presionar Tabdespués de haber escrito parcialmente la palabra para obtener una lista de finalización. Por ejemplo, escribir eatFseguido de Tabpara expandir aeatFood.

Tenga en cuenta : todas estas imágenes enlazan con gifs de ejemplo en acción.

terminaciones supertab

Vim tiene excelentes otras opciones. Debe leer :h ins-completionpara ver la variedad de opciones de finalización integradas. El uso de vim Ctrl- XCtrl- O, combinado con un plugin python-conscientes como jedi puede dar un sabor finalización. Jedi se pueden configurar para dar documentación sobre omni-finalización (esto es lo que Ctrl- XCtrl- Ohace). Luego, la documentación para los candidatos de finalización aparecería en una ventana dividida.

ctrlxctrlo finalización

El uso de complementos similares pero con diferentes opciones conduce a todo tipo de comportamientos. Es posible, por ejemplo, no necesitar solicitar el autocompletado (si eso es lo que busca). En cambio, después de escribir un número de letras (digamos, 2 o 3) de una palabra, un complemento puede intentar ofrecer de manera inteligente posibles compleciones en un menú.

ingrese la descripción de la imagen aquí

¡Entonces la respuesta corta es un sí! Pero el proceso de configuración puede ser un poco complicado. Pienso en ello como un paso en la larga escalera para dominar vim.

davidlowryduda
fuente
Los he probado todos y siempre vuelvo a SuperTab, es el menos intrusivo.
craigp
1
También me gusta mucho el complemento YouCompleteMe, ya que sugiere como-tecleas y puedes elegir o ignorar las sugerencias. Sí, visualmente es difícil de ignorar, pero es muy poco intrusivo en mi flujo de trabajo porque requiere menos pulsaciones de teclas.
Thriveth
3
He cambiado las animaciones para que sean "al hacer clic", en el sentido de que están vinculadas a las animaciones gif.
davidlowryduda
1
No puedo usar YouCompleteMe en mi computadora de trabajo porque no tengo root para instalar las dependencias, SuperTab es, con mucho, la siguiente mejor opción.
Charles Clayton
@mixedmath En mi caso, superTab no funciona.
alhelal
24

Dicha funcionalidad, es decir, la búsqueda en el archivo actual (y todos los archivos abiertos) para autocompletar, debe habilitarse de manera predeterminada con Ctrl+P:

captura de pantalla de autocompletado en uso

Usted puede ir a la n ext sugerencia con Ctrl+Nel p sugerencia mera existencia con Ctrl+Py seleccionarlo tecleando cualquier letra (que se añadirá inmediatamente después de la sugerencia).

yo'
fuente
1
Para el editor (Jasper): Lo más probable es que quiera volver a escribir algo que he escrito recientemente, no algo que escriba en el futuro o que esté al comienzo del archivo. Por ^Plo tanto, es más natural en mi humilde opinión. De lo contrario, gracias por la edición (espero que haya hecho clic en el botón derecho y haya obtenido su +2).
yo '
1
Sí, obtuve esos puntos imaginarios de Internet :) Siempre pensé que la lista de sugerencias se ordenaría alfabéticamente ...
Jasper
El orden de aparición de @Jasper es (al menos para mí, ciertamente, también ver arriba: world,word,woody no al revés). Así ^Pes la última finalización utilizada, lo cual es muy útil (rara vez voy más allá de 3 elementos en la lista, incluso en un archivo largo).
yo '
protip:inoremap <C-Space> <C-N>
wchargin
20

Vim tiene soporte para completar de forma nativa. Puede leer sobre las diferentes terminaciones diferentes que admite Vim :h ins-completion.

En general, para todos los propósitos que he encontrado, los complementos de ins son suficientes para mi gusto, sin embargo, hay algunos complementos de finalización que agregan más valor más allá de lo que ofrecen los complementos de complementos. NeoComplete , YCM (YouCompleteMe) son algunos para lo mismo. Son más avanzados en el sentido de que intentan combinar diferentes tipos de terminaciones con mayor precisión, y también tienen mecanismos de almacenamiento en caché avanzados, por lo que tienden a ser más rápidos. YCM incluso llega a trabajar con compiladores / utilidades externas para proporcionar un mejor IntelliSense.

Dhruva Sagar
fuente
9

Sí, existen scripts de autocompletado para vim. La "mejor" opción depende de su lenguaje de programación. Como su código de ejemplo es Python, sugiero echar un vistazo a Jedi . Construye sobre eso. Me completas, existe, que también tiene soporte para otros idiomas, pero a veces se considera demasiado grande. Para otros idiomas, puede explorar el conjunto largo de scripts vim .

johannes
fuente
7

En el modo de inserción, escriba el primer par de caracteres de una palabra, luego presione:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Esto es particularmente útil cuando se ingresan los nombres de variables en un programa.

La opción 'completa' controla dónde se buscan las palabras clave (incluir archivos, archivos de etiquetas, buffers y más).

La opción 'completeopt' controla cómo ocurre la finalización (por ejemplo, si se muestra un menú).

surendra nath
fuente