Vim:如何突出显示脚本中的搜索模式?

Vim:如何突出显示脚本中的搜索模式?

我没想到这会很难做到,但这样做却行不通。我想做的是从脚本中启用搜索突出显示。我尝试了以下方法:

function! g:TestFunc()
    let @/ ="testtext"
    set hlsearch
endfunction

nnoremap <space> :call g:TestFunc()<cr>

这不起作用。也就是说,在包含“testtext”的文本前面按空格键不会突出显示文本。用户仍然必须按“n”。

我也尝试exec 'normal! n'在函数末尾添加,但也没有用。甚至feedkeys('n')失败了。

答案1

如果在调用之前未设置,则该函数将按预期工作hlsearch。如果已设置,则在函数中设置它似乎无效。您可以通过nohlsearch在映射中设置来解决此问题:

nnoremap <space> :set nohlsearch\|:call g:TestFunc()<cr>

如果您的目标只是突出显示某些模式,并且您不需要特别使用该hlsearch机制,那么您可能需要考虑使用该match命令。它可以更干净地完成相同的任务。

答案2

您无法在函数内设置最后使用的搜索模式和突出显示,请参阅:help function-search-undo。相反,请:set hlsearch直接将 移入您的映射中。

答案3

function! wordsubstitute#run()
    execute "normal! gv\"ay"
    let @/ = @a
    "set nohlsearch
    let s:search_cmd = "normal! /".@/."/\<CR>"
    execute s:search_cmd."N"
    "set hlsearch
endfunction

不要使用 ,而是在映射命令中normal! nN写入:nN

vnoremap [g/ :<c-u>call wordsubstitute#run()<CR>nN

相关内容