题 Vim清除上次搜索突出显示


在Vim中搜索之后,我突出显示了所有出现的事件。我怎么能禁用它?我现在再做一些无法找到的乱码。

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


1599
2018-03-18 09:00


起源


我认为“nnoremap <esc>:noh <return> <esc>”解决方案是对问题的一个更完整的答案 - 通过将其放在.vimrc中,您可以在搜索后按<esc>清除突出显示从上一次搜索(但不禁用突出显示)。 - Stewart Johnson
:set invhlsearch将禁用突出显示(如果已突出显示),如果不突出则启用它。你可以把它映射到说Shift-H。 - puffadder
接受的答案不是最好的。 - qed
感谢您提出我一直想知道的问题3年而且没有打扰(直到今天)寻找答案:) - psynnott
@StewartJohnson小心!您的排名最高的评论与映射会导致错误和意外行为,如下面的评论中所述 stackoverflow.com/a/1037182/1698467 - skywinder


答案:


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

:noh

或完全关闭突出显示:

set nohlsearch

或者,切换它:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

1293
2018-03-18 09:02



通过设置nohlsearch,当重启vim时突出显示返回。 :noh 效果更好。 - Dharmit
令人讨厌的是,它可以像搜索乱码字一样快:/ oajf3w9,因为它是键入:noh。我喜欢@avocade的空间键映射解决方案:noh - nnyby
这个答案和评论不清楚:请注意 set nohlsearch 将禁用下一次搜索的突出显示。的行为 :noh 非常不同:当您执行新搜索时,甚至当您执行与当前搜索相关的操作时(例如,当您键入时),突出显示将自动重新启用 n转到下一个项目)。 - Skippy le Grand Gourou
没有解释这些实际做了什么和后果。感谢@SkippyleGrandGourou解释其中的一些内容。 - Jason S
为了它的价值,我将其映射到 '\/' (或任何你的领导者): map <Leader>/ :nohlsearch<CR> - brianmearns


来自 VIM文档

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

:let @/ = ""

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


641
2018-03-18 09:12



这不会禁用搜索,它会清除模式。 - Shaun Bouckaert
......根据我的理解,这将是他问题的更好解决方案。 - Shaun Bouckaert
投票了。这可能无法回答他的问题,但我经常发现自己想要完全按照你的答案做。谢谢 - skinp
这就是我认为的问题是......这是我为加快清除搜索字符串所做的命令(因此删除所有高亮显示): :command C let @/="" 使用此功能可以输入 :C 清除搜索字符串...非常快,不会影响将来的搜索或突出显示。 - Jason
@ jcreamer898,请参阅关于“寄存器”的vim帮助(:he registers)。 Vim有几个不同的内置寄存器,用于保存文本,有时用于抽取数据,有时用于最后一次搜索等。当你进行搜索时,vim将模式放在“/”寄存器中,你使用它来引用 @/。您还可以使用赋值给寄存器 @regname=value 哪里 regname 是寄存器的名称。所以, @/="" 只是将寄存器“​​/”设置为空字符串(除了对于“/”寄存器,vim将清除最后一次搜索,如果它包含空字符串)。 - Ben Davis


你可以做

:noh

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


558
2018-03-18 14:26



谢谢,这是有用的...任何返回突出显示的命令? - Gabriel Solomon
:nohs只关闭当前的突出显示。如果你有:设置hlsearch,那么它将继续突出显示你的搜索。 - greyfade
我认为这是OP正在寻找的东西(尽管Shaun的答案也有效)。我推荐这个更短的时间。我知道他接受了nohls的答案,但设置它会禁用所有搜索突出显示,即使之后尝试了其他搜索。 - Thiago Arrais
这可能是OP首先想要的,也是最短,最好的答案恕我直言。
即使在这个凡人的领域,完美也是可以实现的!我将使用这个:帮助,并且不想污染<esc>:nnoremap <F1>:noh <CR> - Sam Watkins


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

将以下内容添加到.vimrc:

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

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


269
2018-03-19 16:22



我认为这是一个 许多 比实际被接受的更好的解决方案 - 无论是这一个还是另一个映射到<ESC>的解决方案。 - Stewart Johnson
对于“nnoremap <esc>:noh <return> <esc>”,这是一个更好的答案,因为它不会导致奇怪的行为。 - Dennis Hodapp
需要注意的一点是,请确保不要在重映射的右侧添加任何注释。它们将被解释为重映射的命令而不是注释。 - codybuell
评论错了;命令呢 不 取消设置上一个搜索模式,但只是关闭当前结果的突出显示;你可以打 n 找到下一个事件(将再次突出显示)。顺便说一句,在编写脚本时,我会避免使用缩写形式,而是编写 :nohlsearch。 - Tobias
添加<silent>以避免显示闪烁并在命令行中留下noh - :nnoremap <silent> <CR>:nohlsearch <CR> <CR> - Peter N Lewis


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

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

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


131
2018-06-24 08:53



为了清楚起见,这可以让您通过按Esc键清除搜索突出显示 - Gavin Miller
由于某种原因,这使得我的终端vim启动就像按下“c”一样。有任何想法吗? - Jacob
当我尝试它时,这会引起一些非常奇怪的行为:在启动时,常规的vim移动(例如j,k)将导致线被移除。 nnoremap <CR>:noh <CR> <CR>没有导致这些问题。我无法追查根本原因。 - oasisbob
嗯,我和上面的问题一样。除非你想随意删除你的文字,否则不要在没有测试的情况下使用它。 - Derek Litz
使用“nnoremap <esc>:noh <return> <esc>”使vim始终以“REPLACEMENT”模式启动。 - user1850133


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

/;alskdjf;

这在vim和更少的情况下工作,并且比@ ShaunBouckaert的逻辑清洁解决方案“清除最后使用的搜索模式”更容易记住/输入:

:let @/ = ""

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


36
2018-03-17 15:38



这不仅是一个肮脏的解决方案(我自己直到现在使用,没有冒犯),另一个缺点是它在窗口底部添加了一个丑陋的红色横幅,上面写着“找不到图案”,这几乎和突出显示一样烦人本身并需要进一步采取行动(例如“搜索+退格”)。 - Skippy le Grand Gourou
它也可能需要几秒钟 实际上搜索 整个文件的其余部分。如果文件很大,这真的很烦人。当然,你可以标记你当前的位置,跳到开头,然后向后搜索一个角色,但这同样很脏。 - Blacklight Shining
是的,我也使用这个丑陋的解决方案,但我总是使用'​​/ qwe',由于某种原因,它会匹配任何文件中的任何内容。 - Juan Campa
这是大多数人将使用的解决方案 之前 了解这个 :nohl 命令。一旦我了解了后者,我立即停下来进行搜索。 - Tobias
这不是答案;它只是建议做OP已经做的事情:“我现在再做一次寻找无法找到的胡言乱语。” - iamnotmaynard


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

" Clear last search highlighting
map <Space> :noh<cr>

30
2017-10-23 19:48