Vim-Abschluss - Unterdrücken Sie immer die neue Zeile, nachdem ich einen Vorschlag mit der Eingabetaste ausgewählt habe

11

Manchmal füge Vim eine neue Zeile ein, nachdem ich einen Vorschlag (aus dem Popup-Fenster für die Fertigstellung, das beim Drücken von Strg-N angezeigt wird) mit der Eingabetaste ausgewählt habe, und der Cursor wird in die folgende Zeile bewegt. Das passiert nicht immer - es scheint, dass Vim versucht, klug zu sein und mich nur in die nächste Zeile zu bringen, wenn er denkt, dass dies das ist, was ich möchte.

Ich möchte dieses Verhalten jedoch deaktivieren (da es nicht immer intelligent ist), damit ich immer selbst zur nächsten Zeile wechseln muss, indem ich die Eingabetaste manuell drücke. Ist das möglich?


quelle

Antworten:

14

Was Vim als Reaktion auf die Eingabe der <Eingabetaste> während der Verwendung der Einfügevervollständigung tut, hängt vom Status des Vervollständigungsmenüs ab. Das Verhalten des Menüs wird hier beschrieben:

:help ins-completion-menu

Das Verhalten verschiedener Schlüssel bei Verwendung der Einfügevervollständigung wird im nächsten Abschnitt beschrieben.

:help popupmenu-keys

Hier wird erklärt, dass das Verhalten der <Eingabetaste> vom Menüstatus abhängt. Nach meinem Verständnis wird durch Eingabe von <Eingabetaste> eine neue Zeile eingefügt, außer in dem Fall, in dem Sie mit den Cursortasten eine Übereinstimmung aus dem Menü ausgewählt haben.

Der beste Weg, um das Einfügen einer neuen Zeile zu vermeiden, wenn Sie keine möchten, besteht darin, sie zu beenden oder eine Auswahl mit einer anderen Taste wie Strg-Y oder Strg-E zu treffen.

Siehe auch

:help complete_CTRL-Y

und für die gesamte Beschreibung, wenn der Einfügemodus abgeschlossen ist,

:help ins-completion
Garyjohn
quelle
4

Sie können diese Zuordnung zu Ihrer .vimrc-Datei hinzufügen:

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

Die Eingabetaste wird im Einfügemodus der Eingabe von STRG-Y zugeordnet, wenn das Popup-Menü sichtbar ist. STRG-Y wählt das aktuell ausgewählte Element im Menü aus, ohne eine neue Zeile einzugeben. Andernfalls verhält sich die Eingabetaste wie gewohnt.

Jake
quelle
1
Können Sie erklären, was dieser Code bewirkt und wie er das vom OP gegebene Problem behebt? Unerklärter Code kann für Benutzer nicht vertrauenswürdig und gefährlich erscheinen.
bwDraco
0

Ich habe dies zu .vimrc hinzugefügt und jetzt verhält es sich so, wie ich es möchte:

noremap pumvisible ()? "": ""

Martins
quelle