Markieren Sie den Cursor nach dem Ändern des Puffers in vim

Markieren Sie den Cursor nach dem Ändern des Puffers in vim

Wenn ich vim verwende, habe ich Probleme, meinen Cursor schnell zu finden, nachdem ich einen anderen Puffer aufgerufen habe, insbesondere wenn ich viele Splits geöffnet habe.

Ich habe das behoben, indem ich eine Funktion geschrieben habe, die von einem Autocmd aufgerufen wird, wenn ein Puffer betreten wird. Die Funktion gleicht einige Zeichen um den Cursor ab und trennt sie wieder, wobei sie dazwischen wartet und verwendet sleep.

Das wird allerdings nervig, wenn man schnell und viel wechselt, oder z.B. wenn man einen Hilfe-Tag öffnet, da meine Funktion aufgerufen wirdnachin den Puffer gelangen, aberVorSpringen zum Hilfe-Tag, sodass es spät angezeigt wird.

Wie kann ich mein Ziel erreichen, ohne vim deutlich zu verlangsamen?

BEARBEITEN: Ich habe den Teil mit dem Hilfe-Tag umgangen, indem ich in meiner Hervorhebungsfunktion den Hilfedateityp überprüft habe. Dies ist jedoch immer noch nicht optimal.

Das ist meine Funktion:

function! HlCursor()
    let l:pat = '\v.{0,3}%#.{0,3}'
    " Let it blink for 250ms
    let l:match = matchadd('Todo', l:pat)
    redraw | sleep 250 m
    call matchdelete(l:match)
    redraw
endfunction

Antwort1

Eine Alternative zu Ihrem blockierenden sleep wäre, die Hervorhebung erst bei einem folgenden Ereignis zu entfernen. Um das zu tun, matchadd()definieren Sie nach dem einfach einen weiteren (einmal ausgelösten, d. h. einen, der sich selbst löscht) Autocmd, der die Hervorhebung löscht, und kehren Sie von der Funktion zurück. Geeignete Ereignisse wären WinLeave,CursorMoved,CursorMovedI,CursorHold,CursorHoldI.

Antwort2

Wie wäre es, die integrierten Optionen „cursorline“ und „cursorcolumn“ zu verwenden? Dann können Sie zwei Autocmds verwenden: ein BufEnter- oder WinEnter-Autocmd setlocal cursorline cursorcolumnund ein CursorHold,WinLeave-Autocmd setlocal nocursorline nocursorcolumn.

verwandte Informationen