在 vim 中更改缓冲区后突出显示光标

在 vim 中更改缓冲区后突出显示光标

在使用 vim 时,进入另一个缓冲区后很难快速找到光标,尤其是打开多个分割符时。

我通过编写一个函数来修复这个问题,该函数在进入缓冲区时由自动命令调用。该函数匹配和取消匹配光标周围的几个字符,并在使用之间等待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(),只需定义另一个(触发一次;即删除自身的)自动命令来清除突出显示,然后从函数返回。合适的事件将是WinLeave,CursorMoved,CursorMovedI,CursorHold,CursorHoldI

答案2

如何使用内置的“cursorline”和“cursorcolumn”选项?然后,您可以使用两个自动命令:一个 BufEnter 或 WinEnter 自动命令来执行setlocal cursorline cursorcolumn,以及一个 CursorHold、WinLeave 自动命令来执行setlocal nocursorline nocursorcolumn

相关内容