Une caractéristique assez ennuyeuse de vim est que si vous êtes en mode insertion et que vous effectuez une saisie semi-automatique (Ctrl-N), appuyez sur la touche fléchée vers le bas pour l'élément souhaité, puis appuyez sur la touche Entrée, puis il insère l'élément mais insère également une nouvelle ligne que vous doivent ensuite supprimer.
Existe-t-il un moyen de sélectionner un élément de la liste de saisie semi-automatique sans obtenir de nouvelle ligne indésirable supplémentaire?
vim
autocomplete
Tyler Durden
la source
la source
Réponses:
Cela dépend de l'état du menu contextuel dans lequel vous vous trouvez (voir
:help popupmenu-completion
). Je comprends de votre question que vous êtes dans l'état 2 (puisque vous avez appuyé sur les touches fléchées pour trouver un achèvement). Cependant, le comportement par défaut de l' Enterétat 2 consiste à insérer l'achèvement sans retour à la ligne; ce que vous décrivez est normalement le comportement de l'état 1 (c'est-à-dire lorsque vous utilisez Ctrl+ N/ Ctrl+ P.)Une méthode qui fonctionne de manière cohérente dans tous les États consiste à utiliser Ctrl+ Y. J'aime me souvenir que le Y signifie «oui, accepte ce mot». Il est également possible de commencer à taper le texte qui devrait venir après le mot terminé, à moins que vous n'ayez remappé les choses comme dans la réponse de geedoubleya.
Dans le même contexte, vous pouvez appuyer sur Ctrl+ Epour annuler le menu et laisser votre texte tel qu'il était avant de l'invoquer. Si vous êtes habitué aux appariements de Ctrl+ Eet Ctrl+ Ydans d'autres contextes (par exemple pour faire défiler vers le haut ou vers le bas en mode normal, ou pour insérer le caractère en dessous ou au-dessus du curseur en mode insertion), c'est une façon de s'en souvenir ici. J'imagine que vous pourriez aussi penser à cela comme "quitter" le menu ou similaire.
Voir
:help popupmenu-keys
pour en savoir plus.la source
Personnellement j'utilise celui-ci:
Quiconque utilise le plugin CtrlP peut trouver ce mappage pratique.
la source
Je sais que c'est vieux, mais un peu comme un support de la réponse de geedoubleya car bien que la réponse de l'échophophile soit informative et géniale, si quelqu'un veut une solution rapide et sale:
la source
Au lieu d'utiliser vos touches fléchées, activez vos touches
j
&k
pour faire défiler la liste de saisie semi-automatique.Cette opération modifie la ligne actuelle pour qu'elle corresponde au mot sélectionné lorsque vous faites défiler.
Par conséquent, vous n'avez pas besoin d'appuyer sur Entrée car le curseur est toujours en mode insertion à la fin du mot substitué.
Pour l'activer, ajoutez ceci à votre .vimrc (Merci aux autres de stackoverflow):
Séparément, au lieu d'utiliser les touches fléchées, vous pouvez simplement répéter ce
Ctrl-n
qui va parcourir les options (Ctrl-p
pour revenir en arrière) et le remplacer sur la ligne actuelle au fur et à mesure qu'elle se déplace, pas besoin deEnter
mappages de touches vim.la source