2171

在 Vim 中进行搜索后,我会突出显示所有出现的事件。我怎样才能禁用它?我现在再次搜索无法找到的乱码。

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

4

32 回答 32

1880

要在下一次搜索之前关闭突出显示:

:noh

或者完全关闭突出显示:

set nohlsearch

或者,切换它:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>
于 2009-03-18T09:02:47.920 回答
761

来自VIM 文档

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

:let @/ = ""

这不会将模式设置为空字符串,因为它会在任何地方匹配。模式真的很清晰,就像启动 Vim 时一样。

于 2009-03-18T09:12:09.690 回答
617

你可以做

:noh

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

于 2009-03-18T14:26:22.183 回答
333

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

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

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

因此,在您搜索后,只需在命令模式下再次按回车键,突出显示就会消失。

于 2009-03-19T16:22:09.407 回答
147

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

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

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

于 2009-06-24T08:53:24.267 回答
43

我最初的解决方案(下)是肮脏和浪费的。我现在用:noh

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

--

(不要这样做)

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

/;alskdjf;

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

:let @/ = ""

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

于 2012-03-17T15:38:09.950 回答
34

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

" Clear last search highlighting
map <Space> :noh<cr>
于 2011-10-23T19:48:21.273 回答
34
nnoremap <cr> :noh<CR><CR>:<backspace>

这样,在搜索后:noh点击时,我就摆脱了命令行中显示的内容enter

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

于 2012-08-09T19:04:32.910 回答
34

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

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

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

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

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

注意: noremap使用而不是map其他方式,映射将是递归的。

提示:我通常会重新映射Caps LockCtrl,以便更轻松地键入此类组合键;执行此操作的详细信息取决于您选择的操作系统/窗口系统(并且与此答案无关)。以下两个提示都包括有关映射 Caps Lock到的信息Ctrl以及Esc

于 2014-08-29T13:35:00.737 回答
27

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

于 2010-11-12T17:49:43.987 回答
27

永久禁用搜索突出显示

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

:set nohlsearch

清除突出显示直到下一次搜索

:noh

:nohlsearch(清除直到按下nN


按下时清除突出显示ESC

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

按另一个键或自定义地图清除突出显示

  • 按下时清除突出显示\(反斜杠)

    nnoremap \ :noh<return>
    
  • 击中ESC两次清除亮点

    nnoremap <esc><esc> :noh<return>
    
于 2015-11-07T07:08:40.517 回答
22

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

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

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


另一种选择:

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

根据 vim 文档:

清除匹配()

    Clears all matches previously defined by |matchadd()| and the

    |:match| commands.
于 2014-11-29T21:58:32.987 回答
17

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

:noh

视觉插图

于 2015-12-31T22:54:09.363 回答
13

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

安装vim-cool。它的创建是为了解决这个特定问题。只要您移动光标,它就会关闭突出显示。但请注意,它需要最新的 vim 版本!

于 2017-11-05T20:59:56.130 回答
11

如果你安装了incsearch.vim 插件,那么有一个设置可以在搜索后自动清除高亮:

let g:incsearch#auto_nohlsearch = 1

在此处输入图像描述

于 2016-09-09T06:46:04.047 回答
9

为此有两个“必备”插件:

  1. 明智的-Ctrl-l用于 nohlsearch 和重绘屏幕。
  2. unimpared - [oh]ohcoh控制 hlsearch。
于 2016-03-14T08:16:20.833 回答
8

Vim和 GVIM的 Janus 为像我这样的新手准备了许多东西,包括

<leader>hs - toggles highlight search

这正是您所需要的。只需\hs在正常模式下输入。(领导键\默认映射到。)

HTH。

于 2012-11-20T19:07:52.650 回答
7

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

updatetime默认为 4000 毫秒或 4 秒,但我将我的设置为 10 秒。重要的是要注意,updatetime它的作用远不止于此,因此请在更改之前阅读文档。

function! SearchHlClear()
    let @/ = ''
endfunction
augroup searchhighlight
    autocmd!
    autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
于 2014-04-24T03:56:25.550 回答
7

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

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

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

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

于 2017-08-07T18:29:53.353 回答
7

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

map <esc> :noh<cr>

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

于 2017-12-26T08:11:21.867 回答
6

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

" 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

于 2015-09-30T13:04:37.927 回答
6

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

:nohl

于 2017-02-28T13:45:37.747 回答
5

通过结合 2 个最佳答案的另一种解决方案:

"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
于 2015-04-03T21:44:10.353 回答
4

你可以使用:noremap打开/关闭搜索结果,像这样

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

于 2015-12-09T06:06:23.493 回答
4

我在我的~/.vimrc

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

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

于 2017-11-07T21:24:24.307 回答
3

我认为混合@ShaunBouckaert 和 2009 年 3 月 19 日 16:22 的答案是一个很好的折衷方案:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

按下Enter,突出显示的文本不再突出显示,而搜索突出显示仍处于启用状态。

于 2014-04-29T09:51:24.280 回答
3

根据@baruch-even 的回答,您可以ESC正常模式下双击删除搜索词:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
于 2016-08-19T08:26:15.700 回答
3

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

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

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

于 2018-08-07T01:39:14.320 回答
3

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

  • 完全清除搜索缓冲区(例如,按下n下一个匹配不会恢复搜索)
  • 保留搜索缓冲区,并切换突出显示搜索结果 on/off/on/...(例如,按下n将恢复搜索,但突出显示将基于切换的当前状态)
" use double-Esc to completely clear the search buffer
nnoremap <silent> <Esc><Esc> :let @/ = ""<CR>
" use space to retain the search buffer and toggle highlighting off/on
nnoremap <silent> <Space> :set hlsearch!<CR>
于 2021-02-22T19:03:03.143 回答
1

我将此添加到我的vimrc文件中。

command! H let @/=""

在您进行搜索并想要清除搜索中的亮点后,只需执行:H

于 2019-02-18T10:57:35.510 回答
1

不喜欢 nohlsearch 的任何解决方案,下一个搜索呢?最好的答案是由 let @/ = "" 创建的,但我不喜欢 mac 上的按功能键映射,所以这是我的:

let mapleader=','
let g:mapleader=','
nnoremap <leader>cs :let @/ = ""<cr>
于 2020-08-23T01:08:24.627 回答
0

你也可以在你的 .vimrc 文件中添加映射,

nmap <C-N>:nohlsearch

然后你可以按

Ctrl+N

随时清除突出显示的文本

于 2020-01-19T13:28:41.980 回答