2011-08-03 17 views
14

tengo estas asignaciones de modo de inserción en mi vimrc:Creación de una correlación de modo de inserción, pero no para el modo secundario de autocompletar

imap <C-e> <C-o>A 
imap <C-a> <C-o>I 

Ellos hacen ctrl-a y ctrl-e mover el cursor al inicio y al final de la línea sin salir modo de inserción, a la emacs keybindings.

Me acabo de dar cuenta de que el mapeo <C-e> introduce un conflicto con el submodo de autocompletado. La documentación para CTRL-E afirma:

When completion is active you can use CTRL-E to stop it and go back to the 
originally typed text. 

Mi <C-e> mapeo interfiere con esto. ¿Hay alguna forma de que pueda hacer que ctrl-e salte al final de la línea solo si la autocompletación no está activa?

Respuesta

15

No hay manera diseñada para probar si Ctrl +X -Realización modo está activo o no. Si uno utiliza menú emergente para elegir de la lista de terminaciones disponibles, una solución aceptable podría ser el mapeo

inoremap <c-e> <c-r>=pumvisible() ? "\<c-e>" : "\<c-o>A"<cr> 

(Especialmente en el caso de menuone establecido en la opción completeopt.)

Un general La solución se puede basar en un efecto secundario: en el submodo de finalización, no se permite ingresar al modo Insertar recursivamente (consulte :helpgrep Note: While completion).

inoremap <c-e> <c-r>=InsCtrlE()<cr> 
function! InsCtrlE() 
    try 
     norm! i 
     return "\<c-o>A" 
    catch 
     return "\<c-e>" 
    endtry 
endfunction 
+2

O como un mapeo expresión agradable: 'inoremap pumvisible()? "\ ": "\ A" ' –

+0

Tengo' completeopt = menu, preview' (que es el valor predeterminado), pero su solución funciona bien para mí. Puedo vivir con él si '' no funciona como se esperaba cuando autocompletar ofrece una única sugerencia, porque en ese caso es poco probable que desee descartar la sugerencia. Por lo general, solo deseo descartar el menú de autocompletar si ofrece demasiadas sugerencias, y podría refinar la lista al cancelarla y luego escribir un par de caracteres más. – nelstrom

+1

@nelstrom: ¡Parece que encontré una solución general al problema! Consulte la última actualización de la respuesta (y avíseme si tiene algún problema con la nueva asignación). –

Cuestiones relacionadas