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

2 ответа2

1

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .