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

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

Por ejemplo, mientras escribo lo siguiente Programa Python:

hungy = True def eatFood(food): pass if hungry: eatF 

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

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

Respuesta

Hay muchos tipos diferentes de autocompletar en vim. Una forma podría ser utilizar SuperTab . Esto proporciona una forma de utilizar la finalización de tabulaciones más o menos en cualquier momento. Esto le permitiría presionar Tab después de haber escrito parcialmente la palabra para obtener una lista completa. Por ejemplo, escribiendo eatF seguido de Tab para expandir a eatFood.

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

mg src = «https://i.stack.imgur.com/dVuOT.png» alt = «supertab completions» title = «Haga clic para ver un gif»>

Vim tiene otras opciones excelentes. Debe leer :h ins-completion para ver la variedad de opciones de finalización integradas. Usando vim «s CtrlX Ctrl O , combinado con un complemento compatible con Python como jedi puede dar un sabor de finalización. Jedi se puede configurar para proporcionar documentación sobre la omni-finalización (esto es lo que hace CtrlX Ctrl O ). Luego, la documentación de los candidatos a finalización aparecería en una ventana dividida.

mg src = «https://i.stack.imgur.com/etSIu.png» alt = «ctrlxctrlo completado» title = «Haga clic para ver un gif»>

El uso de complementos similares pero opciones diferentes conduce a todo tipo de comportamientos. Es posible, por ejemplo, no tener que solicitar el autocompletado (si eso es lo que buscas). En cambio, después de escribir una cantidad de letras (digamos, 2 o 3) de una palabra, un complemento puede intente ofrecer inteligentemente posibles finalizaciones en un menú.

mg src = «https://i.stack.imgur.com/gtNK0.png» alt = » ingrese la descripción de la imagen aquí «title =» Haga clic para ver un gif «>

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

Comentarios

  • Yo ‘ los he probado todos y siempre vuelvo a SuperTab, es ‘ el menos intrusivo.
  • También me gusta mucho el complemento YouCompleteMe, ya que sugiere mientras escribe y puede elegir o ignorar las sugerencias. Sí, visualmente es difícil de ignorar, pero es muy poco intrusivo en mi flujo de trabajo porque requi res menos pulsaciones de teclas.
  • Yo ‘ he cambiado las animaciones para que sean » al hacer clic en «, en el sentido de que están vinculados a las animaciones gif.
  • No puedo ‘ usar YouCompleteMe en la computadora de mi trabajo porque no ‘ no tengo root para instalar las dependencias, SuperTab es, con mucho, la siguiente mejor opción.
  • @mixedmath En mi caso, superTab no ‘ no funciona.

Respuesta

Tal funcionalidad, es decir, buscar el archivo actual ( y todos los archivos abiertos) para autocompletar, debe habilitarse de forma predeterminada con Ctrl+P:

captura de pantalla de autocompletado en uso

Puede ir a la sugerencia de n ext con Ctrl+N, la p sugerencia anterior con Ctrl+P y selecciónelo escribiendo cualquier letra (que se agregará inmediatamente después de la sugerencia).

Comentarios

  • Para el editor (Jasper): Lo más probable es que quiera volver a escribir algo que he escrito recientemente, no algo que ‘ escribiré en el futuro o que esté al principio del expediente. Por lo tanto, ^P es más natural en mi humilde opinión. De lo contrario, gracias por la edición (espero haber hecho clic en el botón correcto y obtuviste tu +2).
  • Sí, obtuve esos puntos imaginarios de Internet 🙂 Siempre pensé que la lista de sugerencias estaría ordenada alfabéticamente. ..
  • @Jaspe es el orden de aparición (al menos para mí ciertamente, ver también arriba: world,word,wood y no al revés).Entonces ^P es la última terminación utilizada, lo cual es muy útil (rara vez voy más allá de 3 elementos en la lista, incluso en un archivo largo).
  • protip : inoremap <C-Space> <C-N>

Responder

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

En general, para todos los propósitos que he encontrado, las ins-compleciones son suficientes para mi gusto , sin embargo, hay algunos complementos de finalización que agregan más valor que lo que ofrece ins-completions. 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 avanzados de caché, por lo que tienden a ser más rápidos. YCM incluso va al extremo de trabajar con compiladores / utilidades externas para proporcionar un mejor IntelliSense.

Respuesta

Sí, scripts de finalización automática porque vim existe. La «mejor» opción depende de su lenguaje de programación. Como su código de ejemplo es Python, sugiero que eche un vistazo a Jedi . Construye sobre eso Me completas , que también tiene soporte para otros idiomas, pero a veces se considera demasiado grande. Para otros idiomas, puede navegar por el conjunto largo en secuencias de comandos vim .

Respuesta

En el modo de inserción, escriba los primeros dos 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 al ingresar el nombres de variables en un programa.

La opción «completo» controla dónde se buscan las palabras clave (incluyen archivos, archivos de etiquetas, búferes y más).

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

Deja una respuesta

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