在 nvim
中编写映射时,我有时会使用搜索/替换,例如在此映射中创建与当前行长度相同的标题(对于 markdown 等):
nnoremap <leader>= 0Vyp0v$:s/./=/g<cr>:nohls<cr>
虽然这会使用 :nohls
清除搜索突出显示,但它仍然会创建搜索/替换的“闪存”。
最佳答案
通用解决方案
我会利用: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=
由于此处不涉及任何模式,因此搜索突出显示完全不受其影响:-)
关于vim - 如何在执行映射时防止搜索突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359309/