vim - 如何在执行映射时防止搜索突出显示

标签 vim neovim

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/

相关文章:

eclipse - 有哪些插件可用于在 Vim 或 Eclipse 中编辑 ASCII 图表?

Neovim 自动加载的文件夹

vim - 在 Deoplete 中使用 Ctrl-N 手动完成

VIM:在窗口左侧显示 3 个字符的边框

linux - inotify 不将 vim 编辑视为修改事件

vim - 是否可以在 vim 中直接读入新缓冲区?

go - 在花括号上启用智能缩进

linux - 在Vim中编辑Go源文件时如何禁用空格突出显示?

vim - 按上下文列出 vim 选项,而不是按字母顺序

vim - 转到 Neovim 中的特定相对数轴