首页 > 解决方案 > 如何在执行映射时防止搜索突出显示

问题描述

在 中编写映射时nvim,我有时会使用搜索/替换,例如在此映射中创建与当前行长度相同的标题(用于降价等):

nnoremap <leader>= 0Vyp0v$:s/./=/g<cr>:nohls<cr>

虽然这会清除搜索突出显示:nohls,但它仍然会创建搜索/替换的“闪光”。

标签: vimneovim

解决方案


一般解决方案

我会利用:help function-search-undo这些命令并将其提取到:function. 这不会破坏当前的搜索模式,因此也不会影响搜索突出显示。要完全中立,您只需从搜索历史记录中删除使用的替换模式(通过histdel()):

function! MakeHeading()
    normal! Vyp
    s/./=/g
    call histdel('search', -1)
endfunction
nnoremap <leader>= :call MakeHeading()<CR>

请注意,我还简化了视觉选择处理:V一如既往地选择整行,您不需要转到第一列 ( ^),也不需要重新选择;我们可以让:substitute工作在当前(粘贴的)行上。

替代实施

这让我想起了这个功能的规范实现使用:help v_r命令,这确实需要重新选择:

nnoremap <leader>= Vyp0v$r=

由于此处不涉及任何模式,因此搜索突出显示完全不受它的影响 :-)


推荐阅读