
Gibt es eine Möglichkeit, die Anzeigedauer von Nachrichten in vim zu steuern?
Wenn Sie beispielsweise in vim suchen und ganz unten landen, wird Folgendes angezeigt:
search hit BOTTOM, continuing at TOP
Auch wenn der Cursor nach mehreren Sekunden bereits wegbewegt wurde, verschwindet die Meldung immer noch nicht.
Die einzige Möglichkeit, solche Nachrichten verschwinden zu lassen, die mir einfällt, ist
:redraw
Ich hoffe jedoch, eine Möglichkeit zu finden, dies nach einer gewissen Zeit, beispielsweise 2 Sekunden, für alle derartigen Nachrichten manuell durchzuführen.
Antwort1
Vim bietet keine sinnvolle Möglichkeit, präzise Verzögerungen einzustellen, ohne die Benutzerinteraktion zu beeinträchtigen. Das Beste, worauf Sie hoffen können, ist wahrscheinlich Folgendes:
:autocmd CursorHold * :echo
Ich habe mich dafür entschieden :echo
, weil es optisch weniger störend ist :redraw
und den Befehlsbereich von Nachrichten befreien sollte.
Beachten Sie, dass dies nur funktioniert, wenn Sie sich im Normalmodus befinden undnichtDrücken Sie eine Taste für eine gewisse Zeit (normalerweise vier Sekunden). Warum das so ist, erfahren Sie hier:
:help CursorHold
:help 'updatetime'
Mit anderen Worten, das wird nicht sehr effektiv sein. Es wurde darüber diskutiert, eine echte Ereignisschleife in Vim zu erstellen, in die man sich einklinken kann, aber solange das nicht passiert, wird das, was Sie wollen, nicht verfügbar sein.
Antwort2
Wenn der updatetime
Wert klein ist, echo
wird die Befehlszeilennachricht zu schnell gelöscht. Wir können die timer_start()
Funktion [^1] verwenden, umVerzögerungdie Ausführung von Echo. Folgendes funktioniert bei mir gut:
function! s:empty_message(timer)
if mode() ==# 'n'
echon ''
endif
endfunction
augroup cmd_msg_cls
autocmd!
autocmd CursorHold * call timer_start(25000, funcref('s:empty_message'))
augroup END
Der Wert 25000
wird in Millisekunden gemessen, also ungefähr 25 Sekunden nach dem Halten des Cursors. Sie können diesen Wert nach Belieben anpassen.
[^1]: es scheint, dass dies timer_start()
nur für Vim 8.0+ verfügbar ist.