2010-10-25 10 views
9

En vim, utilizo Ctrl-n para completar la palabra mientras estoy en modo de inserción. Si hay más de una coincidencia posible, obtengo un menú desplegable desde el cual puedo seleccionar una de las posibles coincidencias con las teclas de flecha.vim completado de palabra navegando con 'j' y 'k'

Sin embargo, no quiero utilizar las teclas de flecha; Quiero usar las teclas 'j' y 'k'. Pero cuando escribo 'j' o 'k', inserta las letras en lugar de subir o bajar en el menú desplegable. ¿Hay alguna forma de que pueda configurar vim para que haga esto como yo quiero?

+0

Breve lado a esta pregunta: después de algunos años, mi flujo de trabajo vim es tal que no hago este tipo de personalización más. Prefiero tener vim ser un editor que pueda usar en cualquier lugar, incluidos los servidores Linux y las máquinas de otras personas. Para ese propósito solo uso las combinaciones de teclas predeterminadas. Para más cosas personalizadas, uso emacs. – kerkeslager

Respuesta

15

Ver :hpopupmenu-keys.

No hay un conjunto especial de asignaciones para el sub-modo de menú emergente, pero se puede hacer un mapeo-modo de inserción condicional:

inoremap <expr> j pumvisible() ? "\<C-N>" : "j" 
inoremap <expr> k pumvisible() ? "\<C-P>" : "k" 

Esto hace j/k navegar por el menú emergente como <C-N>/<C-P> , mientras que es visible.

Adición: Si usted quiere ser capaz de mantener el control mientras se escribe j y k, puede reemplazarlos con <C-J> y <C-K>, respectivamente. (Consulte el comentario de mwcz a esta respuesta.)

+4

Un problema que podría surgir al usar este método es que él/ella podría querer seguir escribiendo después de invocar el menú de finalización y las letras que desea escribir son 'j' o 'k'. Solo es bueno saber cuáles son las consecuencias en caso de que surjan problemas en el futuro. – tinifni

+4

@tinifni Se puede usar ' j' y' k' para hacerlo. – ZyX

+4

Como ya presionó Ctrl, me resulta cómodo usar 'C-j' y' C-k' para navegar por la lista. Y no interfiere con el tipado continuo mientras la lista está abierta: 'inoremap pumvisible()?"\ ": "\ " 'y ' inoremap pumvisible()? "\ ": "\ " ' – mwcz

7

No sé de qué manera hacerlo con j y k. Estás en modo insertar, no funcionan.

Pero, no tengo otra manera para que usted, Ctrl +N funciona igual que la lengüeta, y se puede utilizar Shift - Tab ir por la lista y Tab para ir hacia arriba. Es más fácil que usar las teclas de flecha. Pero no tan lindo como serían j y k.

O puede simplemente usar Ctrl +N y Ctrl +P

+5

Y 'CTRL-Y' para aceptar,' CTRL-E' para descartar. – Benoit

Cuestiones relacionadas