在VIM中进行搜索之后,我会突出显示所有事件。我怎么能禁用它?我现在再找一个找不到的乱七八糟的东西。
是否有一种方法可以暂时禁用突出显示,然后在需要时重新启用它?
- 我认为"noremap:noh"解决方案是对问题的更完整的回答——通过将其放入.vimrc中,您可以在搜索后按,从上一次搜索中清除突出显示(但不能禁用突出显示)。
- :set invhlsearch将禁用突出显示(如果已突出显示)并启用(如果未突出显示)。您可以将其映射为shift-h。
- @StewartJohnson在my.vimrc文件中这样做似乎会干扰/破坏:set mouse=a.有什么想法吗?此错误仅在ITerm2中发生
- 这些年来,我输入了太多的胡言乱语来清除突出显示(对于多GB文本文件来说效率很低)。胡言乱语搜索本质上是第二次搜索,这浪费了计算时间。好问题!
- @史都华·约翰逊,小心点!您的顶级注释(带有映射)会导致错误和意外行为,如下面对stackoverflow.com/a/1037182/1698467的注释所述。
- @StewartJohnson,不知何故,这是一个"noremap"打破鼠标滚动(iterm,vim8)。输入":noh"时工作正常
- @stewartjohnson建议的nnoremap :noh解决方案在gui vim中很好地工作,但在终端中运行vim时会导致箭头键和其他esc编码键出现问题。不要把它放在你的~/.vimrc里,不要把它包在if has('gui_running')里…end。
要关闭突出显示直到下一次搜索:
或者完全关闭突出显示:
或者,要切换它:
1 2 3
| set hlsearch!
nnoremap <F3> :set hlsearch!<CR> |
- 通过执行set nohlsearch,当vim重新启动时突出显示将返回。:noh工作得更好。
- 搜索乱七八糟的字符串/oajf3w9和键入:noh一样快,这很烦人。我喜欢@avocade将空间键映射到:noh的解决方案
- 从这个答案和注释中不清楚:请注意,set nohlsearch也将禁用下一次搜索的突出显示。:noh的行为非常不同:当您执行新搜索时,或者甚至当您执行与当前搜索相关的操作时(例如,当您键入n转到下一项时),突出显示将自动重新启用。
- 没有解释这些措施的实际作用和后果。感谢@skippylegrandgourou解释其中的一些内容。
- 为了它的价值,我把它映射到'\/'(或者你的领导是什么):map / :nohlsearch。
- 我只需快速键入/kkk来消除搜索突出显示,因为您在文件中使用"kkk"的可能性非常低。
- 你可以只做:set nohls,而不是:set no highlih...。它们是同义词,并且nohls比nohighlightsearch短得多、多、多。
- @所罗门加比,我很高兴这回答了你想问的问题,但它没有回答你实际问的问题。这就是为什么这里有这么多闲聊。当人们漫不经心地阅读我的问题,并为我没有问到的问题提供答案时,我会感到沮丧,所以看到这一点获得如此多的信任,真是令人失望。
- 我把它映射到上,因为这是我清理屏幕的按键。这是我的地图:nmap :nohlsearch:match:diffupdate。
来自VIM文档
要清除上次使用的搜索模式:
这不会将模式设置为空字符串,因为这将匹配到处都是。这种模式确实是清晰的,就像启动VIM时一样。
- 它将永远禁用它,而不是暂时禁用。
- 这不会禁用搜索,它会清除模式。
- …据我所知,这是解决他的问题的更好办法。
- 通过打开和关闭突出显示,您的答案确实能更好地回答他的问题。但是,如果问题仅仅是在您找到要查找的内容后,上一次搜索仍然突出显示,这就是我最初理解问题的方式,那么我的方法允许您太清楚搜索。
- @迈科拉:我同意你的回答完全正确,但你的解决方案需要额外的按键/步骤。例如,搜索、关闭突出显示、打开突出显示、再次搜索。肖恩的解决方案只需要我搜索,清除突出显示,再搜索。
- @迈科拉:上面的解释——这是从我搜索和修改了一些文本后,我想彻底摆脱搜索的心态开始的。使用我的个人工作流,在完成搜索结果之前,我不想关闭搜索结果。
- 正如我所理解的,"当内德德再次出现时重新启用它"是这个问题的重要组成部分。如果不是,我会用let@/="
- @Mykola我真的以为他只是问如何禁用和重新启用它,因为他不确定你能清除搜索,所以他在寻找下一个最佳的选择。
- 这就是我要找的!我投了赞成票,问题有点含糊。这让我觉得这正是他想要的:"我现在又在寻找一些找不到的胡言乱语。"因为这是我清除搜索的目的,但不禁用它,所以下一个搜索将再次突出显示。
- 这就是我认为的问题…下面是我为加快清除搜索字符串(因此删除所有突出显示)而发出的命令::command C let @/="",使用该命令可以键入:C来清除搜索字符串…非常快速,不会影响将来的搜索或突出显示。
- 这也是我一直在寻找的。我喜欢突出显示搜索。然而,一旦我完成了它,我想清除模式,而不是完全关闭它!谢谢。
- 这是海报不知道他想要的更好的答案。据我所知,这正是他所要求的,这正是我想要的,所以,投了反对票。
- 所以,如果没有hlsearch设置,这比:noh更好?因为这会抹掉搜索目标,所以我不能按n进入下一场比赛。这似乎减少了功能,而不是使用hlsearch。
- 如果使用答案中提供的解决方案。要"重新启用",您可以按/然后按向上箭头,然后按Enter。这将使用以前从当前光标位置使用的搜索字符串执行新的搜索。
- 有人能以VIM的方式向一个VIM新手解释这是如何工作的吗?:)
- @JCreamer898,见"寄存器"上的VIM帮助(:he registers)。Vim有几个不同的内置寄存器来保存文本,有时用于提取数据,有时用于最后的搜索等。当您进行搜索时,Vim将模式放入"/"寄存器,您使用@/引用该寄存器。您还可以使用@regname=value为寄存器赋值,其中regname是寄存器的名称。因此,@/=""只是将寄存器"/"设置为空字符串(除了对于"/"寄存器,如果它包含空字符串,vim将清除最后一次搜索)。
- 将这个添加到.vimrc中以获取ctrl+/以清除上一次搜索:noremap :let @/ =""。
- @最棒的Linux很好。我使用noremap使其在正常模式下工作。
- 在我看来,这比:noh更有效,因为即使:noh将清除突出显示,在VIM重新采购之后,所有突出显示将再次显示。使用此解决方案,重新源不会显示任何突出显示。
- 这有一个副作用,即通过清除模式,您将失去按n重新搜索的能力。我更喜欢:noh(绑定到一个键),因为我可以清除突出显示,但通过按n很容易将其恢复。
- 当我使用这个时,每次我用vim重新打开文件时,突出显示都会回来。给出了什么?我认为这个解决方案应该是永久清除模式,而不仅仅是暂时禁用突出显示。另一方面,当我重新打开文件时,:noh不会重新启用突出显示。
你可以做到
或者:nohlsearch暂时禁用搜索突出显示,直到下一次搜索。
- 谢谢,这很有帮助…有返回突出显示的命令吗?
- :nohs只是关闭当前突出显示。如果设置了:set hlsearch,则它将继续突出显示您的搜索。
- 我认为这就是OP正在寻找的(尽管肖恩的答案也有效)。我赞成这个缩短。我知道他接受了nohls的答案,但是设置它将禁用所有搜索突出显示,即使之后尝试了另一个搜索。
- 这可能是行动党首先想要的,也是最短、最好的答案。
- 即使在这个凡人的世界里,完美也是可以达到的!我将不止使用:帮助,而且不想污染:nnoremap:noh
几年前我在vim.org上找到了这个答案:
在.vimrc中添加以下内容:
1 2
| "This unsets the"last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR> |
因此,在搜索之后,只需在命令模式下再次单击返回,突出显示就会消失。
- 我认为这是一个比实际被接受的更好的解决方案——要么是这个,要么是映射到的另一个。
- 这是一个更好的答案"noremap:noh",因为它不会导致奇怪的行为。
- 要注意的一件重要事情是,不要在翻拍的右手边放任何评论。它们将被解释为remap的命令,而不是注释。
- 注释错误;该命令不会取消最后一个搜索模式的设置,而只是关闭当前结果的突出显示;您可以点击n查找下一个事件(将再次突出显示)。顺便说一句,在编写脚本时,我会避免使用缩写形式,而是编写:nohlsearch。
- 添加以避免显示闪烁并在命令行中保留noh-:nnoremap:nohlsearch
- 或者将其绑定到ctrl+l,这将清除并重新绘制屏幕:nnoremap :noh。
- 我喜欢这一个,但为什么是两个?如果要将光标保持在原来的位置,请只使用1个。
- @然后你就不能用回车键向下移动。
- @乔纳森·莱因哈特,我明白了,谢谢!问题是,我不使用Enter,每当我想关闭突出显示时,光标的位置都会发生变化,这让我很困扰。
- 我认为这应该是最相关的答案,看看这个问题,并预先假设OP的意图!
来自http://twitter.com/jonbho/status/2194406821
1 2 3
| " Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[ |
第二行用于映射到escape键,因为vim在内部使用escape表示特殊键。
- 为了清楚起见,您可以通过按Escape键清除搜索突出显示。
- 出于某种原因,这使得我的终端VIM启动时好像按下了"C"。有什么想法吗?
- 这在我尝试的时候引起了一些非常奇怪的行为:在启动时,常规的VIM运动(如J、K)会导致线路被移除。noremap:noh没有引起这些问题。我找不到根本原因。
- 嗯,我和上面的问题一样。不要在没有测试的情况下使用它,除非你喜欢随机删除你的文本…
- 这个问题阐述了评论界指出的这种方法的一些问题。
- 我还要加上:inoremap :noh。
- 我将此功能添加到我的ctrl-l键中,该键通常用于清除/重画屏幕。重新映射esc总是很棘手的事情——我会避免它,因为几乎所有终端都依赖于没有固有代码(如箭头键等)的密钥的转义键代码。
- 把它映射到esc之后的奇怪行为。不过,当映射到空间时,效果很好。
- 在自己尝试过之后,映射到ESC是一个坏主意——它会导致一些意想不到的问题。这是因为vim处理键的方式-例如,当您按下向上箭头键时,vim接收到代码:[a-,因此,在重新映射键之后,按下向上箭头将正常工作,因为"[a"失去其特殊含义。
- 所以总结一下,就像其他人已经做过的那样,只需将这个序列映射到、或、或,或者其他你觉得最自然的东西。但不要插手。
- 使用"nnoremap:noh"使VIM始终以"替换"模式启动。
- 感谢这个解决方案(第二行修复)是伟大的和直观的,似乎与箭头的工作:)我会给它一个尝试。但是,如果您知道一些使用/search字符的解决方案或映射,例如d/或c/,那么它也可能是一个很好的选项,,
- nnoremap :noh解决方案在GUI VIM中很好地工作,但在终端中运行VIM时会导致箭头键和其他ESC编码键出现严重问题。不要把它放在你的~/.vimrc里,不要把它包在if has('gui_running')里…end。
我原来的解决方案(以下)是肮脏和浪费。我现在用的是:noh。
与VIM中的许多特性一样,正确的方法通常不容易被发现。
——
(不要这样做)
搜索不太可能的字符序列(按主行上的键):
/;alskdjf;
这在vim和更少版本中有效,并且比@shaunbuckaert逻辑上更清晰的解决方案"清除上次使用的搜索模式"更容易记住/键入:
:let @/ =""
一个潜在的缺点是它会给你的搜索历史添加垃圾信息。
- 这不仅是一个肮脏的解决方案(我自己一直使用,直到现在,没有冒犯),另一个缺点是它在窗口底部添加了一个丑陋的红色横幅,上面写着"找不到模式",这几乎和突出显示本身一样令人恼火,需要进一步的操作(例如"搜索+退格")。
- 它还可能需要几秒钟,因为它实际上会搜索文件的整个其余部分。如果文件很大,那真的很烦人。当然,你可以标记你当前的位置,跳到开头,然后向后搜索一个角色,但这同样是肮脏的。
- 是的,我也使用这个难看的解决方案,但是我总是使用'/qwe',因为某种原因,我从来没有在任何文件中匹配过任何东西。
- 这是大多数人在了解:nohl命令之前使用的解决方案。一旦我了解了后者,我立即停止搜索。
- 这不是一个答案;它只是建议做一件OP已经做过的事情:"我现在再做一次搜索,寻找一些找不到的胡言乱语。"
- 我使用/q w清除搜索突出显示,在英语中,所有以q开头的单词后面都是u,而不是w;)
- 如果你想要一个简单而简短的模式,只需使用/$4。这不仅仅是不可能匹配任何东西,而且实际上是完全不可能的。$后面必须始终跟新行或是文件的结尾,4既不是新行也不是文件的结尾。(具体来说,4的原因是它在同一个键上,所以很容易快速输入)
在我的.vimrc.local文件中重新映射到,快速而脏,但功能非常好:
1 2
| " Clear last search highlighting
map <Space> :noh<cr> |
提出:noh或:nohlsearch的答案(如matt mcminn's)对于暂时禁用搜索突出显示是正确的,如原始问题中所述。
我想我会提供一个在正常模式下有用的映射:
1
| nnoremap <C-L> :nohlsearch<CR><C-L> |
默认情况下,VIM中的ctrll清除并重新绘制屏幕。许多命令行程序(主要是那些使用GNU readline库的程序,如bash)使用相同的键组合来清除屏幕。此功能在后台运行的进程打印到终端,并重写前台进程的部分时非常有用。
在重新绘制屏幕之前,此正常模式映射还清除最近搜索词的突出显示。我发现这两个功能相辅相成,并且可以方便地将一个CtrLL同时用于两个操作,而不是为禁用搜索突出显示创建单独的映射。
注意:使用noremap而不是map,否则映射将是递归的。
提示:我通常将caps lock重新映射到ctrl,以便更容易地键入此类键组合;具体操作取决于您对操作系统/窗口系统的选择(此答案不在主题范围内)。以下两个提示都包括有关将caps Lock映射到CtrL以及esc的信息:
- 映射Caps锁定以在XWindows中转义
- 映射Caps锁定以在窗口中转义
1
| nnoremap <cr> :noh<CR><CR>:<backspace> |
这样,当搜索后点击enter时,我就摆脱了命令行中显示的:noh。
:就像开始输入一个新命令,backspace会清除它并将焦点放回编辑器窗口。
- 谢谢您。出现在左下角的":noh"让我疯了,该死的强迫症。
- 我试着通过做noremap:noh把它映射到移位的cr,但是它不起作用,你知道为什么它可能不起作用吗?
- 我怀疑你不能把换班和退货结合起来,但我真的不知道。
- @charlieparker iirc只能在[a-z]和此类字符上使用shift。
- 不做:操作,只需在nnoremap后添加命令vim不要在命令区显示任何输出:nnoremap :noh。
我通常将:noh映射到反斜杠键。要重新启用突出显示,只需点击n,它将再次突出显示。
永久禁用搜索突出显示
使用/进行搜索时,不会突出显示匹配项。
清除突出显示直到下一次搜索
或:nohlsearch(清除,直到按下n或n)
按
esc时清除突出显示
1
| nnoremap <esc> :noh<return><esc> |
按另一个键或自定义地图时清除突出显示
按(反斜杠)时清除突出显示
清除两次点击esc时的突出显示
1
| nnoremap <esc><esc> :noh<return> |
- nnoremap :noh解决方案在GUI VIM中很好地工作,但在终端中运行VIM时会导致箭头键和其他ESC编码键出现严重问题。不要把它放在你的~/.vimrc里,不要把它包在if has('gui_running')里…end。还可以考虑添加,以避免在状态栏中闪烁:noh命令。
这是我使用的(摘自许多不同的问题/答案):
1
| nnoremap <silent> <Esc><Esc> :let @/=""<CR> |
使用"Double"esc,可以删除突出显示,但一旦再次搜索,突出显示就会重新出现。
另一种选择:
1
| nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR> |
根据VIM文件:
clearmatches()
1 2 3
| Clears all matches previously defined by |matchadd()| and the
|:match| commands. |
- 我在顶级解决方案中遇到了一些错误,为了节省你尝试所有答案的时间。使用此解决方案!编辑您的.vimrc并在其中输入以下条目:nnoremap :let @/=""。
- 但这就是O.O.的意思,也许你可以投反对票?
- 我支持你的解决方案…这是我最棒的一个…我也投了赞成票。:)
- 使用@/=""清除搜索寄存器会产生副作用,使n无法恢复搜索。我更喜欢:noh,它将以前的搜索保存在寄存器中以供重复使用。
关闭突出显示直到下一次搜索
如果您安装了incsearch.vim插件,那么有一个设置可以在搜索后自动清除突出显示:
1
| let g:incsearch#auto_nohlsearch = 1 |
Janus for Vim和GVIM为像我这样的新手提供了许多现成的东西,包括
1
| <leader>hs - toggles highlight search |
这正是你需要的。只需在正常模式下键入\hs。(默认情况下,leader键映射到\。)
Hth.
为此,有两个"必须拥有"插件:
sensible-Ctrl-l用于nohlsearch和redraw屏幕。
未启用-[oh、]oh和coh控制HLSEARCH。
- 在V2中,未受影响的co改为yo,所以是yoh。参见github.com/tpope/vim-unpaired/blob/v2.0/doc/unpaired.txt和github.com/tpope/vim-unpaired/issues/150
这将清除updatetime毫秒不活动后的搜索突出显示。
updatetime默认为4000毫秒或4秒,但我将我的设置为10秒。需要注意的是,updatetime不仅仅是这样,所以在更改之前请先阅读文档。
1 2 3 4 5 6 7
| function! SearchHlClear()
let @/ = ''
endfunction
augroup searchhighlight
autocmd!
autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END |
如果要快速启用/禁用突出显示,可以将键映射到
1 2
| " 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
我想把esc映射到:noh命令,如下所示:
map :noh
我最近写了一篇关于vim搜索的整篇文章:如何在普通vim上搜索以及增强搜索功能的最佳插件。
另一个解决方案是将两个最重要的答案组合在一起:
1 2
| "To clear the last used search pattern:
nnoremap <F3> :let @/ =""<CR> |
- 使用@/=""清除搜索寄存器会产生副作用,使n无法恢复搜索。我更喜欢:noh,它将以前的搜索保存在寄存器中以供重复使用。你可以把和nnoremap :noh绑定在一起。
我只使用下面的简单nohl,不需要插件。
:nohl
我的猜测是,最初的问题不是禁用搜索突出显示,而是从上一次搜索中清除突出显示。最初的海报提到的搜索乱七八糟的字符串的解决方案,是一个我已经用了一段时间来从以前的搜索中清除突出显示的方法,但它又丑陋又麻烦。
我发现在~/中添加nnoremap ...的一些建议。vimrc在这里有在启动时将vim置于替换模式的效果,这完全不是我想要的。我找到的最简单的解决方案是添加行
1
| nmap <esc><esc> :noh<return> |
给我的~/.vimrc。这符合亲吻原则,不会干扰箭头键,使用一个就可以了。在命令模式(或从插入或替换模式到三重模式)中需要一个double-来清除先前搜索中的突出显示,但从用户界面的角度来看,这使得操作尽可能简单。
- 您所说的单箭头键干扰是什么意思?
- @hansmosh参见unix.stackexchange.com/questions/28713/&hellip;我在.vimrc中使用两行,如下所示nmap :noh - to turn off search highlighting and nmap ` :set hlsearch - to turn on search highlighting。
我在我的~/.vimrc中使用以下内容
nnoremap :noh
这使得清除当前突出显示的搜索非常简单和快速。我的引导键被映射到\,所以这使得用我的右手小指和拇指执行操作非常容易。
我认为将@shaunbuckaert和2009年3月19日16:22的答案混合在一起是一个很好的折衷方案:
1 2
| " Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR> |
按enter,突出显示的文本将不再突出显示,同时搜索突出显示仍处于启用状态。
可以使用:noremap打开/关闭搜索结果,如下所示
:noremap :set hls! hls?
基于@baruch even answer,您可以删除esc上的搜索词,同时在正常模式下使用:
1 2
| nnoremap <esc> :let @/ =""<return><esc>
nnoremap <esc>^[ <esc>^[ |
- 我认为第二次装订没问题,但第一次装订很危险。重新映射在GUI VIM中很好地工作,但在终端中运行VIM时,会导致箭头键和其他ESC编码键出现严重问题。不要把它放在你的~/.vimrc里,不要把它包在if has('gui_running')里…end。还可以考虑添加,以避免在状态栏中闪烁:noh命令。
安装VIM Cool。它是为了解决这个特定的问题而创建的。一旦移动光标,它就会关闭亮显。不过,请注意,它需要最新的VIM版本!
我也不喜欢。我发现一直进入江户很烦人。所以我把下面的映射放在我的.vimrc中
1
| noremap <C-_> :nohl<cr>:<backspace> |
第一个位(:nohl清除突出显示;第二个位(:清除命令行是一个技巧。搜索仍然存在于背景中,因此,如果您只需点击n,它就会突出显示并带您进入下一个事件。
我把这个添加到我的vimrc文件中。
command! H let @/=""
使用Just do :H