Sie können die folgende Zuordnung verwenden:
cnoremap <expr> <CR> getcmdtype() == '/' ? '<CR>zz' : '<CR>'
Was so erklärt werden kann:
cnoremap
Erstellen Sie eine Zuordnung im Befehlszeilenmodus
<expr>
Bei der Zuordnung wird ein Ausdruck ausgewertet (wobei Bedingungen verwendet werden können).
<CR>
Der Schlüssel zum Remap ( Enter)
getcmdtype()
Gibt ein Zeichen zurück, das angibt, welcher Befehlszeilenmodus verwendet wird
== '/'
Hat a getcmdtype()
zurückgegeben, /
was bedeutet, dass wir uns im Suchmodus befinden?
'<CR>zz'
Wenn wir uns im Suchmodus befinden, führen Sie zz
nach dem Drücken aus<CR>
'<CR>'
Sonst nur ausführen <CR>
Verwandte Hilfethemen:
BEARBEITEN Beachten Sie, dass es interessant wäre, ein Mapping zu erstellen, das sowohl bei der Vorwärts- als auch bei der Rückwärtssuche funktioniert, dh bei der getcmdtype()
Rückgabe /
oder ?
. Hier ist das Mapping, um das zu tun:
cnoremap <expr> <CR> (getcmdtype() == '?' \|\| getcmdtype() == '/') ? '<CR>zz' : '<CR>'
Beachten Sie das Escapezeichen der |
Zeichen: Wenn es sich nicht um Escapezeichen handelt, wird vim cnoremap <expr> <CR> (getcmdtype() == '?'
als erster auszuführender Befehl verstanden, gefolgt von einem Befehl, getcmdtype() == '/') ? '<CR>zz' : '<CR>'
der keinen Sinn ergibt und einen Fehler verursacht.
EDIT 2 @Antony schlug dank ihm eine besser lesbare Lösung vor:
cnoremap <expr> <CR> getcmdtype() =~ '[/?]' ? '<CR>zz' : '<CR>'
getcmdtype() =~ '[?/]'
wäre es ein bisschen einfacher./
als Bewegung: zBc/search
wechselt von meiner aktuellen Position zur nächsten übereinstimmenden Position , fügtsearch
aber aufgrund dercnoremap
den Text einzz
. Gedanken zu einer Problemumgehung oder sollte ich die Zuordnung entfernen?Die Antwort von Statox ist definitiv die bisher beste, aber als Alternative habe ich gerade von Vim-slash erfahren, einem Plugin, das darauf abzielt, "das Sucherlebnis im Puffer zu verbessern".
Und aus der Readme:
Ich habe es gerade ausprobiert und es funktioniert reibungslos in beide Richtungen (
/
und?
).quelle