Achèvement de Vim - toujours supprimer la nouvelle ligne après avoir sélectionné une suggestion avec la touche Entrée

11

Parfois, après avoir sélectionné une suggestion (dans la fenêtre de complétion qui apparaît lorsque vous appuyez sur Ctrl-N) à l'aide de la touche Entrée, Vim insère une nouvelle ligne et le curseur est déplacé sur la ligne suivante. Cela ne se produit pas toujours - il semble que Vim essaie d'être intelligent à ce sujet et ne me fera passer à la ligne suivante que s'il pense que c'est ce que j'aimerais.

Cependant, je souhaite désactiver ce comportement (car il n'est pas toujours intelligent) afin que je doive toujours passer à la ligne suivante par moi-même en appuyant manuellement sur la touche Entrée. Est-ce possible?


la source

Réponses:

14

Ce que Vim fait en réponse à votre saisie de la touche <Entrée> lors de l'utilisation de l'insertion terminée dépend de l'état du menu d'achèvement. Le comportement du menu est décrit ici:

:help ins-completion-menu

et le comportement des différentes touches lors de l'utilisation de l'insertion est décrit dans la section suivante,

:help popupmenu-keys

où il explique que le comportement de la touche <Entrée> dépend de l'état du menu. Si je comprends bien, taper <Entrée> insère une nouvelle ligne sauf dans le cas où vous avez sélectionné une correspondance dans le menu à l'aide des touches de curseur.

La meilleure façon d'éviter d'insérer une nouvelle ligne lorsque vous n'en voulez pas est de terminer ou de faire une sélection à l'aide d'une autre touche telle que Ctrl-Y ou Ctrl-E.

Voir également

:help complete_CTRL-Y

et pour la description complète si l'achèvement du mode insertion,

:help ins-completion
garyjohn
la source
4

Vous pouvez ajouter ce mappage à votre fichier .vimrc:

inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"

Il mappera la touche de retour en mode insertion pour entrer CTRL-Y lorsque le menu contextuel est visible. CTRL-Y sélectionne l'élément actuellement sélectionné dans le menu sans entrer de nouvelle ligne. Sinon, la touche retour agira normalement.

Jake
la source
1
Pouvez-vous expliquer ce que fait ce code et comment il résout le problème posé par l'OP? Un code inexpliqué peut sembler non fiable et dangereux pour les utilisateurs.
bwDraco
0

J'ai ajouté ceci à .vimrc et maintenant il se comporte comme je veux:

noremap pumvisible ()? "\": ""

martins
la source