При использовании 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
.