在使用 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()
,只需定義另一個(觸發一次;即刪除自身的)autocmd 來清除突出顯示,並從函數返回。合適的活動是WinLeave,CursorMoved,CursorMovedI,CursorHold,CursorHoldI
。
答案2
使用內建的“cursorline”和“cursorcolumn”選項怎麼樣?然後,您可以使用兩個 autocmd:一個 BufEnter 或 WinEnter autocmd to dosetlocal cursorline cursorcolumn
和一個 CursorHold,WinLeave autocmd to do setlocal nocursorline nocursorcolumn
。