我经常使用vim的/
搜索功能,并会使用n
跳转到下一场比赛。但是,当光标跳转到下一个匹配并且屏幕重绘时,通常根本不明显光标在屏幕上的位置(因此下一个匹配的位置)。在过去,我不得不做一个jk
舞蹈来使光标移动,所以我可以找到它。我的光标默认不闪烁(我觉得很烦人),但我想要的是:当光标跳到下一个匹配时,它应该改变颜色或短暂闪烁以引起注意它在屏幕上的位置,然后切换回到默认的游标行为。如何在我的.vimrc文件中创建此行为?到目前为止,我的google-fu已经失败了。
注意:我知道有一个设置可以突出显示所有搜索匹配项(hlsearch
),但我更喜欢保持视图干净。暂时突出显示当前比赛会很好,但我想只关注当前比赛,而不是所有比赛。
答案 0 :(得分:7)
我在.vimrc中使用它,它会将搜索词居中放在显示屏的中间位置。这不仅可以轻松找到搜索词,还可以自动为我提供足够的上下文,我通常不需要在搜索后滚动。
" Center the display line after searches. (This makes it *much* easier to see
" the matched line.)
"
" More info: http://www.vim.org/tips/tip.php?tip_id=528
"
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz
答案 1 :(得分:3)
Steve Losh做了类似的事情 - 当你跳到下一个位置(n键)时,光标闪烁! Here's how it works screencast和here is the code(有关主题的某些变体,请参阅旧提交。)
答案 2 :(得分:0)
我掀起了几个似乎处理好这个问题的功能。它们可能不是最好的实现,但它们似乎有效。
function! s:NextMatch()
let param = getreg('/')
let pos = getpos('.')
let next_match = matchadd('Search', '\%'.pos[1].'l\%'.pos[2].'v'.param)
redraw
sleep 250ms
silent! call matchdelete(next_match)
endfunction
function! s:DoNextMatch()
let cmd_type = getcmdtype()
if cmd_type == '/' || cmd_type == '?'
return "\<cr>:call " . s:SID() . "NextMatch()\<cr>"
endif
return "\<cr>"
endfunction
function s:SID()
return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID$')
endfun
nnoremap <silent> n n:call <sid>NextMatch()<cr>
nnoremap <silent> N N:call <sid>NextMatch()<cr>
cnoremap <silent> <expr> <cr> <sid>DoNextMatch()
经过测试:vim -u test.vim -N file.txt