Aufbauend auf Alexanders Antwort habe ich so etwas in meinem .vimrc
"unix like completion - longest substring
set completeopt+=longest
"add command to retrigger longest substring
"Naive version... see below
inoremap <C-m> <C-e><C-n>
Das 'längste' Stück erledigt also den größten Teil der Arbeit, jedoch nachfolgende Pressen von <C-n>
Ich fange gerade an, durch die Optionen zu blättern. Wenn Sie drücken <C-e>
dass (e) nds Autovervollständigung, erneut mit auslösen <C-n>
Entspricht der nächstlängeren Teilzeichenfolge. Wenn Sie eine Verknüpfung hinzufügen, müssen Sie nicht zwei Tasten drücken.
Das willst du nicht binden <C-n>
So können Sie auf gewohnte Weise nicht mehr radeln
Ich habe M gewählt, da es direkt neben N steht und überprüfe ( :h insert-index
) ist standardmäßig nur gebunden an same as <CR>
.... weil dies vim ist und nichts jemals einfach ist, stellt sich heraus, dass dies bedeutet, dass vim nicht wirklich kann zwischen den beiden Tastendrücken unterscheiden !
Wenn Ihnen die Verwendung egal ist <C-m>
dann nimm einfach was anderes, sonst lies weiter ...
Basierend auf diesem anderen Beitrag habe ich die Antwort unten angepasst und die Syntax ein wenig überarbeitet (basierend auf diese )
Ich endete damit:
"add command to retrigger longest substring
inoremap <expr> <C-M> pumvisible() ? "\<C-e><C-n>" : "\<C-m>"
pumvisible () gibt ein Flag zurück, das angibt, ob das Popup-Menü geöffnet ist. Dies hält uns davon ab, das Verhalten der Eingabetaste im Einfügemodus zu ändern, wenn das Popup-Menü nicht geöffnet ist.
Leider kann ich keine Dokumentation für das finden? und: und warum wir Strings übergeben müssen.