簡體   English   中英

突出顯示在vim中的下一個

[英]Highlighting find next in vim

我經常使用vim /搜索功能,並使用n跳轉到下一個匹配。 但是,當光標跳轉到下一個匹配並且屏幕重繪時,通常根本不明顯光標在屏幕上的位置(因此下一個匹配的位置)。 在過去,我不得不做一個jk舞,讓光標移動,所以我可以找到它。 我的光標默認不閃爍(我覺得很煩人),但我想要的是:當光標跳到下一個匹配時,它應該改變顏色或短暫閃爍以引起注意它在屏幕上的位置,然后切換回到默認的游標行為。 如何在我的.vimrc文件中創建此行為? 到目前為止,我的google-fu失敗了。

注意:我知道有一個突出顯示所有搜索匹配( hlsearch )的設置,但我更喜歡保持我的視圖干凈。 暫時突出顯示當前的比賽會很好,但我想只關注當前比賽,而不是所有比賽。

我在我的.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

Steve Losh做了類似的事情 - 當你跳到下一個位置(n鍵)時,光標閃爍! 以下是它的工作方式截屏這里是代碼 (請參閱主題的一些變體的舊提交)。

我掀起了幾個似乎處理這個問題的功能。 它們可能不是最好的實現,但它們似乎有效。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM