2010-10-25 3 views
9

Dans vim, j'utilise Ctrl-n pour compléter le mot en mode insertion. S'il y a plus d'une correspondance possible, j'obtiens une liste déroulante à partir de laquelle je peux sélectionner l'une des correspondances possibles en utilisant les touches fléchées.vim terminaison de navigation avec 'j' et 'k'

Cependant, je ne veux pas utiliser les touches fléchées; Je veux utiliser les touches 'j' et 'k'. Mais quand je tape 'j' ou 'k', il insère les lettres au lieu de monter ou descendre dans la liste déroulante. Existe-t-il un moyen de configurer vim pour le faire comme je le souhaite?

+0

bref aparté à cette question: après quelques années, mon flux de travail de vim est telle que je ne fais pas ce genre de personnalisation plus. Je préférerais que vim soit un éditeur que je puisse utiliser n'importe où, y compris les serveurs Linux aléatoires et les machines d'autres personnes. Pour ce faire, j'utilise simplement les raccourcis clavier par défaut. Pour plus de trucs personnalisés, j'utilise emacs. – kerkeslager

Répondre

15

Voir :hpopupmenu-keys.

Il n'y a pas ensemble spécial de correspondances pour le menu contextuel sous-mode, mais vous pouvez faire une cartographie insertion en mode conditionnel:

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

Cela rend j/k naviguer dans le menu contextuel comme <C-N>/<C-P> , alors que c'est visible.

Addendum: Si vous voulez être en mesure de tenir le contrôle pendant que vous tapez j et k, vous pouvez les remplacer par <C-J> et <C-K>, respectivement. (Voir le commentaire de mwcz à cette réponse.)

+4

Un problème que l'on pourrait rencontrer lors de l'utilisation de cette méthode est qu'il/elle voudra continuer à taper après avoir appelé le menu d'achèvement et les lettres qu'il/elle souhaite taper sont 'j' ou 'k'. Juste bon de savoir quelles sont les conséquences en cas de problèmes surgissent dans le futur. – tinifni

+4

@tinifni On peut utiliser ' j' et' k' pour le faire. – ZyX

+4

Puisque vous avez déjà appuyé sur Ctrl, je trouve confortable d'utiliser 'C-j' et' C-k' pour naviguer dans la liste. Et il n'interfère pas avec la poursuite de la saisie lorsque la liste est ouverte: 'inoremap pumvisible()?"\ ": "\ " 'et ' inoremap pumvisible()? "\ ": "\ " ' – mwcz

7

Je ne connais pas le moyen de le faire avec j et k. Vous êtes en mode insertion, ils ne fonctionnent pas.

Mais, j'ai une autre façon pour vous, Ctrl +N fonctionne comme Tab, et vous pouvez utiliser Maj - Tab pour aller en bas de la liste et Tab pour monter. C'est plus facile que d'utiliser les touches fléchées. Mais pas aussi bien que j et k serait.

Ou vous pouvez simplement utiliser Ctrl +N et Ctrl +P

+5

Et 'CTRL-Y' accepter,' CTRL-E' à rejeter. – Benoit