Una característica bastante molesta de vim es que si está en modo de inserción y realiza un autocompletado (Ctrl-N), presione la tecla de flecha hacia abajo hasta el elemento deseado, y presione la tecla Intro, luego inserta el elemento pero también inserta una nueva línea que luego tiene que eliminar.
¿Hay alguna manera de seleccionar un elemento de la lista de autocompletar sin obtener una nueva línea adicional no deseada?
vim
autocomplete
Tyler Durden
fuente
fuente
Respuestas:
Depende del estado del menú emergente en el que se encuentre (ver
:help popupmenu-completion
). Según su pregunta, entiendo que está en el estado 2 (ya que ha presionado las teclas de flecha para encontrar una finalización). Sin embargo, el comportamiento predeterminado para el Enterestado 2 es insertar la finalización sin nueva línea; lo que describe es normalmente el comportamiento del estado 1 (que es cuando usa Ctrl+ N/ Ctrl+ P).Una forma que funciona de manera consistente en todos los estados es usar Ctrl+ Y. Me gusta recordar que la Y significa "sí, acepta esa palabra". También es posible comenzar a escribir el texto que debe aparecer después de la palabra completa, a menos que haya reasignado las cosas como en la respuesta de geedoubleya.
En el mismo contexto, puede presionar Ctrl+ Epara cancelar el menú y dejar el texto como estaba antes de invocarlo. Si está acostumbrado a los pares de Ctrl+ Ey Ctrl+ Yen otros contextos (por ejemplo, para desplazarse hacia arriba o hacia abajo en modo normal, o para insertar el carácter debajo o encima del cursor en modo de inserción), esa es una forma de recordarlo aquí. Supongo que también podrías pensar en ello como "salir" del menú o similar.
Mira
:help popupmenu-keys
para más.fuente
Personalmente uso este:
Cualquiera que use el complemento CtrlP puede encontrar conveniente esta asignación.
fuente
Sé que esto es viejo, pero un poco como un respaldo en la respuesta de geedoubleya, ya que aunque la respuesta de echristopherson fue informativa e increíble, si alguien quiere una solución rápida y sucia:
fuente
Como alternativa al uso de las teclas de flecha, habilite las teclas
j
&k
para desplazarse por la lista de autocompletar.Hacer esto cambia la línea actual para que coincida con la palabra seleccionada a medida que se desplaza.
Por lo tanto, no tiene que presionar enter ya que el cursor todavía está en modo de inserción al final de la palabra sustituida.
Para habilitar esto, agregue esto a su .vimrc (Gracias a otros en stackoverflow):
Por separado, en lugar de usar las teclas de flecha, puede repetir lo
Ctrl-n
que maldecirá a través de las opciones (Ctrl-p
para ir hacia atrás) y sustituir en la línea actual a medida que se mueve, sin necesidad deEnter
asignaciones de teclas vim.fuente