在Vim中进行搜索后,我突出显示了所有事件。我怎样才能禁用它?我现在再次搜索一些找不到的胡言乱语。

有没有一种方法可以暂时禁用高亮显示,然后在需要时再次启用?


当前回答

nnoremap silent <cr> :noh<cr><cr>

这样我就可以在搜索后按回车键时,去掉命令行中显示的noh。

:就像开始输入一个新命令,Backspace将其清除并将焦点放回编辑器窗口。

其他回答

我个人喜欢将esc映射到命令:noh,如下所示:

地图<esc>:否<cr>

我最近写了一整篇关于Vim搜索的文章:如何在普通Vim上搜索,以及增强搜索功能的最佳插件。

提出:noh或:nohlsearch(例如,Matt McMinn的)的答案对于暂时禁用搜索突出显示是正确的——正如最初的问题中所问的那样。

我想我会贡献一个在普通模式下有用的映射:

nnoremap <C-L> :nohlsearch<CR><C-L>

默认情况下,Vim中的CtrlL会清除并重新绘制屏幕。许多命令行程序(大多数是使用GNU Readline库的程序,如Bash)使用相同的组合键来清除屏幕。此功能在后台运行的进程打印到终端,覆盖前台进程的部分时非常有用。

此正常模式映射也会在重绘屏幕之前清除最近搜索词的突出显示。我发现这两个功能相辅相成,同时使用一个CtrlL来执行两个操作,而不是创建一个单独的映射来禁用搜索突出显示,这很方便。

注意:使用noremap而不是map,否则映射将是递归的。

提示:我通常将Caps Lock重新映射到Ctrl,以便更容易键入这样的组合键;这样做的细节取决于您对OS/窗口系统的选择(这个答案与主题无关)。以下两个提示都包含有关将Caps Lock映射到Ctrl和Esc的信息:

在XWindows中,地图大写锁定为转义在Windows中,地图大写锁定为转义

如果您安装了incsearch.vim插件,则有一个设置可以在搜索后自动清除突出显示:

let g:incsearch#auto_nohlsearch = 1

这是我使用的(从许多不同的问题/答案中提取):

nnoremap <silent> <Esc><Esc> :let @/=""<CR>

使用“double”Esc键可以删除突出显示,但一旦再次搜索,突出显示将再次出现。


另一种选择:

nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>

根据vim文档:

清除匹配()清除以前由|matchadd()|和|:match |命令。

我的猜测是,最初的问题不是禁用搜索突出显示,而是简单地从上次搜索中清除突出显示。搜索原始海报中提到的乱码字符串的解决方案是我用了一段时间来清除先前搜索中突出显示的解决方案,但它既丑陋又麻烦。

我发现了几个添加nnoremap的建议。。。~/.vimrc在这里的效果是在启动时将vim置于替换模式,这根本不是我想要的。我找到的最简单的解决方案是添加行

nmap <esc><esc> :noh<return>

这符合KISS原则,不会干扰箭头键,而使用一个<esc>就可以了。在命令模式下需要一个double-<esc>(或者在插入或替换模式下需要三个-<esc>)来清除先前搜索中的突出显示,但从UI角度来看,这使得操作尽可能简单。