vim清除上次搜索突出显示

在Vim中进行搜索后,我将所有出现的事件都突出显示。我如何禁用它?我现在再次搜索无法找到的胡言乱语。

有没有办法暂时禁用突出显示,然后在需要时重新启用它?

648913 次浏览

要关闭突出显示直到下一次搜索:

:noh

或者完全关闭突出显示:

set nohlsearch

或者,切换它:

set hlsearch!
nnoremap <F3> :set hlsearch!<CR>

VIM文档

要清除上次使用的搜索模式:

:let @/ = ""

这不会将模式设置为空字符串,因为这将匹配这个模式真的被清除了,就像启动Vim一样。

你能做到的

:noh

#0暂时禁用搜索突出显示,直到下一次搜索。

几年前我在vim.org找到了这个答案:

将以下内容添加到您的. vimrc:

"This unsets the "last search pattern" register by hitting returnnnoremap <CR> :noh<CR><CR>

因此,搜索后,只需在命令模式下再次点击返回,突出显示就会消失。

http://twitter.com/jonbho/status/2194406821

" Clear highlighting on escape in normal modennoremap <esc> :noh<return><esc>nnoremap <esc>^[ <esc>^[

映射到转义键需要第二行,因为Vim内部使用转义来表示特殊键。

我通常将:noh映射到反斜杠键。要重新启用突出显示,只需点击n,它将再次突出显示。

重映射到我的。vimrc.local文件,快速而肮脏,但非常实用:

" Clear last search highlightingmap <Space> :noh<cr>

我最初的解决方案(下图)既脏又浪费。我现在使用:noh

像Vim中的许多功能一样,正确的方法通常不容易被发现。

--

(不要这样做)

搜索不太可能的字符序列(将主行上的键混合):

/;alskdjf;

这适用于vim和less,并且比@ShaunBouckaert的逻辑更清晰的解决方案“清除最后使用的搜索模式”更容易记住/键入:

:let @/ = ""

一个潜在的缺点是它会在您的搜索历史中添加垃圾。

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

这样,当搜索后点击输入时,我摆脱了命令行中显示的:noh

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

Janus用于VIM和GVIM有许多适合像我这样的新手的东西,包括

<leader>hs - toggles highlight search

这正是您需要的。只需在正常模式下键入\hs。(默认情况下,leader键映射到\。)

嗯。

这将在updatetime毫秒的不活动后清除搜索突出显示。

updatetime默认为4000ms或4s,但我将我的设置为10s。重要的是要注意updatetime的作用不仅仅是这个,所以在更改它之前阅读文档。

function! SearchHlClear()let @/ = ''endfunctionaugroup searchhighlightautocmd!autocmd CursorHold,CursorHoldI * call SearchHlClear()augroup END

我认为在16:22混合@ShaunBouckaert和Mar 19'09答案是一个很好的妥协:

" Reset highlighted searchnnoremap <CR> :let @/=""<CR><CR>

输入,突出显示的文本不再突出显示,而搜索突出显示仍然启用。

提出:noh#1的答案(例如,Matt McMinn的)对于暂时禁用搜索突出显示是正确的-正如原始问题中所问。

我想我应该贡献一个在正常模式下有用的映射:

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

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

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

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

提示:我通常重新映射大写锁定Ctrl,以便更容易键入这样的组合键;这样做的细节取决于您选择的操作系统/窗口系统(并且与本答案无关)。以下两个提示都包括有关映射大写锁定Ctrl以及Esc的信息:

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

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

使用“双”Esc,您可以删除突出显示,但一旦您再次搜索,突出显示就会重新出现。


另一种选择:

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

根据vim留档:

clearMatch()

    Clears all matches previously defined by |matchadd()| and the
|:match| commands.

通过组合2个热门答案再提供一个解决方案:

"To clear the last used search pattern:nnoremap <F3> :let @/ = ""<CR>

如果您希望能够启用/禁用突出显示迅速,您可以将键映射到

" Press F4 to toggle highlighting on/off, and show current value.:noremap <F4> :set hlsearch! hlsearch?<CR>

只需将上述代码片段放入. vimrc文件中。

这是最方便的方式来显示和隐藏搜索突出显示与一个唱键

更多信息请查看留档http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches

永久禁用搜索突出显示

每次使用//进行搜索时,匹配项都不会突出显示

:set nohlsearch

清除高亮直到下一次搜索

:noh

:nohlsearch(清除直到nN被按下)


按下ESC时清晰突出显示

nnoremap <esc> :noh<return><esc>

按下另一个键或自定义地图时清除高亮

  • \(反斜杠)时清除高亮

    nnoremap \ :noh<return>
  • Clear highlights on hitting ESC twice

    nnoremap <esc><esc> :noh<return>

您可以使用不再映射打开/关闭搜索结果,如下所示

:noremap <F3> :set hls! hls?<CR>

关闭高亮显示直到下一次搜索

:noh

可视化插图

有两个“必须有”插件:

  1. 明智-Ctrl-l用于nohlsearch和重绘屏幕。
  2. 无损-[oh]ohcoh来控制hlsearch。

基于@baruch-ven答案,您可以在正常模式下使用ESC双击删除搜索词:

nnoremap <esc> :let @/ = ""<return><esc>nnoremap <esc>^[ <esc>^[

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

let g:incsearch#auto_nohlsearch = 1

在此处输入图片描述

我只是使用下面的简单nohl,不需要插件。

:nohl

我的猜测是,最初的问题与禁用搜索突出显示无关,而是简单地清除上次搜索中的突出显示。搜索胡言乱语字符串的解决方案,最初的海报提到了,我已经使用了一段时间来清除之前搜索中的突出显示,但它很丑陋和麻烦。

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

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

到我的~/. vimrc。这遵循了KISS原则,不会干扰箭头键,使用单个会干扰箭头键。在命令模式下需要双-(或从插入或替换模式下需要三-)来清除先前搜索中的突出显示,但从UI的角度来看,这使得操作尽可能简单。

移动光标后立即关闭突出显示:

安装vim酷。它是为解决此特定问题而创建的。一旦您移动光标,它就会关闭突出显示。但请注意,它需要最新的vim版本!

我在我的~/.vimrc中使用以下内容

nnoremap <Leader><space> :noh<Enter>

这使得清除当前突出显示的搜索非常容易和快速。我的leader键映射到\,因此这使得我的右手小指和拇指非常容易执行该操作。

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

map <esc> :noh<cr>

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

我也不喜欢它。我发现一直输入:nohl很无聊…所以我把下面的映射放在我的.vimrc

noremap <C-_> :nohl<cr>:<backspace>

第一位(:nohl<cr>)清除突出显示;第二位(:<backspace>)是命令行干净的技巧。搜索仍然在后台,所以如果你只是点击n,它会重新突出显示并带你到下一个出现。

我把它添加到我的vimrc文件中。

command! H let @/=""

在您进行搜索并希望从搜索中清除亮点后,只需执行:H

您也可以在. vimrc文件上添加映射,

nmap<C-N>: nohlsearch

然后你就可以按下

Ctrl+N

随时清除突出显示的文本

不喜欢nohlsearch的任何解决方案,下一次搜索怎么办?最好的答案是由let @/ = ";"创建,但我不喜欢mac上的map by函数键,所以这是我的:

let mapleader=','let g:mapleader=','nnoremap <leader>cs :let @/ = ""<cr>

两者行为定义映射,因为两者很有用!

  • 完全清除搜索缓冲区(例如,按下n进行下一个匹配将没有恢复搜索)
  • 保留搜索缓冲区,并将突出显示搜索结果切换为打开/关闭/打开/…(例如,按n将恢复搜索,但突出显示将基于当前切换状态)
" use double-Esc to completely clear the search buffernnoremap <silent> <Esc><Esc> :let @/ = ""<CR>" use space to retain the search buffer and toggle highlighting off/onnnoremap <silent> <Space> :set hlsearch!<CR>