突出显示光标所在的搜索结果

时间:2013-11-11 13:32:44

标签: regex vim

我尝试突出显示光标所在的搜索结果之一,

我使用matchadd\%#@/撰写正则表达式。

但我不知道。

以下是替代使用。

这就是我想要实现的目标。

enter image description here

1 个答案:

答案 0 :(得分:1)

以下内容将突出显示s:hl_group中定义的突出显示组的当前搜索结果。每当您按nN时,它都会更新。它还定义了一个命令HlClear,以便在完成后清除突出显示。这可以称为:HlClear

" Set this to a group from :help highlight-default
let s:hl_group = 'ErrorMsg'

function! s:HlNext()
    call s:HlClear()
    let param = getreg('/')
    let s:next_match = matchadd(s:hl_group, '\%#'.param)
    redraw
endfunction

function! s:HlMatch()
    let cmd_type = getcmdtype()
    if cmd_type == '/' || cmd_type == '?'
        return "\<cr>:call ".s:SID()."HlNext()\<cr>"
    endif
    return "\<cr>"
endfunction

function! s:HlClear()
    silent! call matchdelete(s:next_match)
endfunction

function! s:SID()
  return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID$')
endfun

nnoremap <silent> n n:call <sid>HlNext()<enter>
nnoremap <silent> N N:call <sid>HlNext()<enter>
cnoremap <silent> <expr> <enter> <sid>HlMatch()

command HlClear :call <sid>HlClear()