Подсветка курсора после изменения буфера в vim

Подсветка курсора после изменения буфера в vim

При использовании vim мне трудно быстро находить курсор после входа в другой буфер, особенно если открыто много разделов.

Я исправил это, написав функцию, которая вызывается autocmd при входе в буфер. Функция сопоставляет и отменяет сопоставление нескольких символов вокруг курсора, ожидая между ними с помощью sleep.

Однако это начинает раздражать при быстром и частом переключении или, например, при открытии тега справки, поскольку моя функция вызываетсяпослевход в буфер, нодопереходим к тегу справки, поэтому он появляется поздно.

Как мне достичь своей цели, не замедляя существенно работу vim?

РЕДАКТИРОВАТЬ: Я обошел часть тега справки, проверив тип файла справки в моей функции подсветки. Однако это все еще не оптимально.

Вот моя функция:

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

решение1

Альтернативой блокировке сна будет только снятие выделения на следующем событии. Чтобы сделать это, после matchadd()просто определите еще один (fire-once; т. е. тот, который удаляет себя) autocmd, который очистит выделение, и вернитесь из функции. Подходящими событиями будут WinLeave,CursorMoved,CursorMovedI,CursorHold,CursorHoldI.

решение2

Как насчет использования встроенных опций "cursorline" и "cursorcolumn"? Тогда вы можете использовать две автокоманды: автокоманду BufEnter или WinEnter для выполнения setlocal cursorline cursorcolumnи автокоманду CursorHold,WinLeave для выполнения setlocal nocursorline nocursorcolumn.

Связанный контент