So steuern Sie die Anzeigedauer von Vim-Nachrichten

So steuern Sie die Anzeigedauer von Vim-Nachrichten

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 :redrawund 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 updatetimeWert klein ist, echowird 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 25000wird 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.

verwandte Informationen