关于突出显示:vim清除上次搜索突出显示

Vim clear last search highlighting

在VIM中进行搜索之后,我会突出显示所有事件。我怎么能禁用它?我现在再找一个找不到的乱七八糟的东西。

是否有一种方法可以暂时禁用突出显示,然后在需要时重新启用它?


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

1
:noh

或者完全关闭突出显示:

1
set nohlsearch

或者,要切换它:

1
2
3
set hlsearch!

nnoremap <F3> :set hlsearch!<CR>


来自VIM文档

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

1
:let @/ =""

这不会将模式设置为空字符串,因为这将匹配到处都是。这种模式确实是清晰的,就像启动VIM时一样。


你可以做到

1
:noh

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


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

在.vimrc中添加以下内容:

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

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


来自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表示特殊键。


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

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

——

(不要这样做)

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

/;alskdjf;

这在vim和更少版本中有效,并且比@shaunbuckaert逻辑上更清晰的解决方案"清除上次使用的搜索模式"更容易记住/键入:

:let @/ =""

一个潜在的缺点是它会给你的搜索历史添加垃圾信息。


在我的.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映射到反斜杠键。要重新启用突出显示,只需点击n,它将再次突出显示。


永久禁用搜索突出显示

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

1
:set nohlsearch

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

1
:noh

:nohlsearch(清除,直到按下nn)

esc时清除突出显示

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

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

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

    1
    nnoremap \ :noh<return>
  • 清除两次点击esc时的突出显示

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


这是我使用的(摘自许多不同的问题/答案):

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.


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

1
:noh

Visual Illustration


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

1
let g:incsearch#auto_nohlsearch = 1

enter image description here


Janus for Vim和GVIM为像我这样的新手提供了许多现成的东西,包括

1
<leader>hs - toggles highlight search

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

Hth.


为此,有两个"必须拥有"插件:

  • sensible-Ctrl-l用于nohlsearch和redraw屏幕。
  • 未启用-[oh]ohcoh控制HLSEARCH。

  • 这将清除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>


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

    :nohl


    我的猜测是,最初的问题不是禁用搜索突出显示,而是从上一次搜索中清除突出显示。最初的海报提到的搜索乱七八糟的字符串的解决方案,是一个我已经用了一段时间来从以前的搜索中清除突出显示的方法,但它又丑陋又麻烦。

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

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

    给我的~/.vimrc。这符合亲吻原则,不会干扰箭头键,使用一个就可以了。在命令模式(或从插入或替换模式到三重模式)中需要一个double-来清除先前搜索中的突出显示,但从用户界面的角度来看,这使得操作尽可能简单。


    我在我的~/.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>^[


    安装VIM Cool。它是为了解决这个特定的问题而创建的。一旦移动光标,它就会关闭亮显。不过,请注意,它需要最新的VIM版本!


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

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

    第一个位(:nohl清除突出显示;第二个位(:清除命令行是一个技巧。搜索仍然存在于背景中,因此,如果您只需点击n,它就会突出显示并带您进入下一个事件。


    我把这个添加到我的vimrc文件中。

    command! H let @/=""

    使用Just do :H