Wählen Sie ein Element in der Vim-Autovervollständigungsliste aus, ohne einen Zeilenumbruch einzufügen

Wählen Sie ein Element in der Vim-Autovervollständigungsliste aus, ohne einen Zeilenumbruch einzufügen

Eine ziemlich nervige Eigenschaft von vim besteht darin, dass, wenn Sie sich im Einfügemodus befinden und eine Autovervollständigung (Strg-N) durchführen, mit der Pfeiltaste nach unten zum gewünschten Element gehen und die Eingabetaste drücken, das Element zwar eingefügt wird, aber auch eine neue Zeile eingefügt wird, die Sie anschließend löschen müssen.

Gibt es eine Möglichkeit, ein Element aus der Autovervollständigungsliste auszuwählen, ohne einen zusätzlichen unerwünschten Zeilenumbruch zu erhalten?

Antwort1

Dies hängt davon ab, in welchem ​​Popup-Menüstatus Sie sich befinden (siehe :help popupmenu-completion). Ich verstehe aus Ihrer Frage, dass Sie sich in Status 2 befinden (da Sie die Pfeiltasten gedrückt haben, um eine Vervollständigung zu finden). Das Standardverhalten für Status 2 besteht jedoch darin, die Vervollständigung ohne neue Zeile einzufügen. Was Sie beschreiben, ist normalerweise das Verhalten von Status 1 (wenn Sie + / + Enterverwenden ).CtrlNCtrlP

Eine Methode, die in allen Zuständen konsistent funktioniert, ist die Verwendung von Ctrl+ Y. Ich merke mir das Y gerne als Symbol für „Ja, akzeptiere dieses Wort“. Es ist auch möglich, einfach mit der Eingabe des Textes zu beginnen, der nach dem fertigen Wort kommen soll, es sei denn, Sie haben die Zuordnung wie in der Antwort von geedoubleya geändert.

Im selben Kontext können Sie Ctrl+ drücken E, um das Menü abzubrechen und Ihren Text so zu belassen, wie er war, bevor Sie es aufgerufen haben. Wenn Sie die Kombinationen von Ctrl+ Eund Ctrl+ Yaus anderen Kontexten gewohnt sind (z. B. um im Normalmodus nach oben oder unten zu scrollen oder im Einfügemodus das Zeichen unter oder über dem Cursor einzufügen), ist dies eine Möglichkeit, sich das hier zu merken. Ich denke, Sie können es auch als „Verlassen“ des Menüs oder Ähnliches betrachten.

Weitere Informationen finden Sie :help popupmenu-keysunter.

Antwort2

Ich persönlich verwende dieses:

inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<CR>"
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<Up>"

Jeder, der dieCtrlP-Pluginfinden diese Zuordnung möglicherweise praktisch.

Antwort3

Ich weiß, das ist alt, aber ich baue irgendwie auf der Antwort von geedoubleya auf, denn obwohl die Antwort von echristopherson informativ und großartig war, falls jemand eine schnelle und einfache Lösung möchte:

inoremap <expr> <cr> ((pumvisible())?("\<C-y>"):("\<cr>"))

Antwort4

Aktivieren Sie alternativ zur Verwendung der Pfeiltasten die Tasten j& , kum durch die Autovervollständigungsliste zu scrollen.

Dadurch wird die aktuelle Zeile so geändert, dass sie beim Scrollen mit dem ausgewählten Wort übereinstimmt.

Sie müssen daher nicht die Eingabetaste drücken, da sich der Cursor noch im Einfügemodus am Ende des ersetzten Wortes befindet.

Um dies zu aktivieren, fügen Sie Folgendes zu Ihrer .vimrc hinzu (Danke an die anderen bei stackoverflow):

inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))

Anstatt die Pfeiltasten zu verwenden, können Sie auch einfach wiederholen, Ctrl-nwodurch die Optionen durchgeblättert werden ( um rückwärts zu gehen) und in der aktuellen Zeile ersetzt werden, ohne dass eine Vim- oder andere Tastenzuordnung Ctrl-perforderlich ist .Enter

verwandte Informationen