Vim清除上次搜索突出显示

时间:2009-03-18 09:00:32

标签: vim highlight

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

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

32 个答案:

答案 0 :(得分:1439)

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

:noh

或完全关闭高亮显示:

set nohlsearch

或者,切换它:

set hlsearch!

nnoremap <F3> :set hlsearch!<CR>

答案 1 :(得分:656)

来自VIM Documentation

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

:let @/ = ""

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

答案 2 :(得分:563)

你可以做到

:noh

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

答案 3 :(得分:280)

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

将以下内容添加到.vimrc:

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

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

答案 4 :(得分:135)

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

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

mapping to the escape key需要第二行,因为Vim内部使用escape来表示特殊键。

答案 5 :(得分:37)

我原来的解决方案(下面)很脏,很浪费。我现在使用:noh

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

-

(不要这样做)

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

/;alskdjf;

这可以在vim中运行,并且比@ ShaunBouckaert逻辑清晰的解决方案“清除最后使用的搜索模式”更容易记忆/输入:

:let @/ = ""

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

答案 6 :(得分:31)

nnoremap <cr> :noh<CR><CR>:<backspace>

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

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

答案 7 :(得分:30)

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

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

答案 8 :(得分:30)

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

我以为我会提供一个我认为在普通模式下有用的映射:

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

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

此正常模式映射还会在重新绘制屏幕之前清除最近搜索词的突出显示。我发现这两个特征相互补充,一起使用一个 Ctrl L 可以很方便,而不是创建一个单独的映射来禁用搜索突出显示。

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

提示:我通常会将大写锁定重新映射到 Ctrl ,以便更轻松地输入这些组合键;这样做的细节取决于您选择的操作系统/窗口系统(这个答案是偏离主题的)。以下提示包括有关将大写锁定映射到 Ctrl 以及 Esc 的信息:

答案 9 :(得分:26)

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

答案 10 :(得分:21)

永久禁用搜索突出显示

使用 /

进行搜索时,不会突出显示匹配项
:set nohlsearch

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

:noh

:nohlsearch(清除直到 n N 被按下)

ESC

清除突出显示
nnoremap <esc> :noh<return><esc>

按下其他键或自定义地图时清除突出显示

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

    nnoremap \ :noh<return>
    
  • 明确点击 ESC 两次

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

答案 11 :(得分:14)

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

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

使用“double” Esc 删除突出显示,但只要再次搜索,突出显示就会重新显示。


另一种选择:

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

根据vim文档:

  

clearmatches()

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

    |:match| commands.

答案 12 :(得分:9)

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

let g:incsearch#auto_nohlsearch = 1

enter image description here

答案 13 :(得分:9)

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

:noh

Visual Illustration

答案 14 :(得分:8)

Janus for VIM and GVIM为像我这样的新手提供了许多内容,包括

<leader>hs - toggles highlight search

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

HTH。

答案 15 :(得分:7)

有两个人必须拥有&#39;插件:

  1. sensible - Ctrl-l用于nohlsearch和重绘屏幕。
  2. unimpared - [oh]ohcoh来控制hlsearch。

答案 16 :(得分:6)

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

updatetime默认为4000毫秒或4秒,但我将我的设置为10秒。重要的是要注意updatetime不仅仅是这样,所以在更改之前请阅读文档。

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

答案 17 :(得分: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

答案 18 :(得分:5)

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

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

答案 19 :(得分:5)

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

map <esc> :noh<cr>

I wrote a whole article recently about Vim search:如何搜索vanilla Vim以及增强搜索功能的最佳插件。

答案 20 :(得分:4)

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

:nohl

答案 21 :(得分:4)

我的猜测是,原始问题不是禁用搜索突出显示,而只是清除上次搜索中的突出显示。原始海报提到的搜索乱码的解决方案是我一直用来清除之前搜索突出显示的一个,但它很丑陋而且很麻烦。

我发现将nnoremap ...添加到〜/ .vimrc的一些建议在此处起作用,即在启动时将vim置于替换模式,这根本不是我想要的。我发现最简单的解决方案是添加行

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

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

答案 22 :(得分:4)

我在~/.vimrc

中使用以下内容

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

这样可以非常轻松快捷地清除当前突出显示的搜索。我的领导键被映射到\,所以这使得我的右手小指和拇指很容易执行动作。

答案 23 :(得分:3)

您可以使用:noremap 打开/关闭搜索结果,例如

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

答案 24 :(得分:3)

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

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

答案 25 :(得分:3)

我认为混合@ShaunBouckaert和09年3月19日16:22的答案是一个很好的妥协:

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

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

答案 26 :(得分:3)

安装vim-cool。它是为了解决这个特定问题而创建的。一旦移动光标,它就会关闭高亮显示。但要注意,它需要最近的vim版本!

答案 27 :(得分:1)

我也不喜欢。我发现一直都很难输入:nohl……所以我在.vimrc

中放入了以下映射
noremap <C-_> :nohl<cr>:<backspace>

第一位(:nohl<cr>)清除突出显示;第二位(:<backspace>)是一种 clean 命令行的技巧。搜索仍在后台进行,因此,如果您直接点击n,它将重新突出显示,并带您到下一个匹配项。

答案 28 :(得分:1)

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

  • 完全清除搜索缓冲区(例如,按 n 进行下一场比赛将恢复搜索)
  • 保留搜索缓冲区,并打开/关闭/打开/打开突出显示搜索结果...(例如,按 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>

答案 29 :(得分:0)

我将此添加到了atan2文件中。

vimrc

要使用,只需command! H let @/=""

答案 30 :(得分:0)

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

nmap <C-N>:nohlsearch

然后您可以按

Ctrl + N

随时清除突出显示的文本

答案 31 :(得分:0)

nohlsearch的任何解决方案都不受欢迎,那么下一次搜索呢?最好的答案是由let @ / =“”创建的,但是我不喜欢在Mac上按功能键进行映射,因此这是我的:

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