在Vim中进行搜索后,我将所有出现的事件都突出显示。我如何禁用它?我现在再次搜索无法找到的胡言乱语。
有没有办法暂时禁用突出显示,然后在需要时重新启用它?
要关闭突出显示直到下一次搜索:
:noh
或者完全关闭突出显示:
set nohlsearch
或者,切换它:
set hlsearch! nnoremap <F3> :set hlsearch!<CR>
从VIM文档
要清除上次使用的搜索模式:
:let @/ = ""
这不会将模式设置为空字符串,因为这将匹配这个模式真的被清除了,就像启动Vim一样。
你能做到的
或#0暂时禁用搜索突出显示,直到下一次搜索。
几年前我在vim.org找到了这个答案:
将以下内容添加到您的. vimrc:
"This unsets the "last search pattern" register by hitting returnnnoremap <CR> :noh<CR><CR>
因此,搜索后,只需在命令模式下再次点击返回,突出显示就会消失。
从http://twitter.com/jonbho/status/2194406821
" Clear highlighting on escape in normal modennoremap <esc> :noh<return><esc>nnoremap <esc>^[ <esc>^[
映射到转义键需要第二行,因为Vim内部使用转义来表示特殊键。
我通常将:noh映射到反斜杠键。要重新启用突出显示,只需点击n,它将再次突出显示。
重映射到我的。vimrc.local文件,快速而肮脏,但非常实用:
" Clear last search highlightingmap <Space> :noh<cr>
我最初的解决方案(下图)既脏又浪费。我现在使用:noh
像Vim中的许多功能一样,正确的方法通常不容易被发现。
--
(不要这样做)
搜索不太可能的字符序列(将主行上的键混合):
/;alskdjf;
这适用于vim和less,并且比@ShaunBouckaert的逻辑更清晰的解决方案“清除最后使用的搜索模式”更容易记住/键入:
一个潜在的缺点是它会在您的搜索历史中添加垃圾。
nnoremap silent <cr> :noh<cr><cr>
这样,当搜索后点击输入时,我摆脱了命令行中显示的:noh。
:就像开始输入一个新命令,退格清除它并将焦点放回编辑器窗口。
Janus用于VIM和GVIM有许多适合像我这样的新手的东西,包括
<leader>hs - toggles highlight search
这正是您需要的。只需在正常模式下键入\hs。(默认情况下,leader键映射到\。)
\hs
\
嗯。
这将在updatetime毫秒的不活动后清除搜索突出显示。
updatetime
updatetime默认为4000ms或4s,但我将我的设置为10s。重要的是要注意updatetime的作用不仅仅是这个,所以在更改它之前阅读文档。
function! SearchHlClear()let @/ = ''endfunctionaugroup searchhighlightautocmd!autocmd CursorHold,CursorHoldI * call SearchHlClear()augroup END
我认为在16:22混合@ShaunBouckaert和Mar 19'09答案是一个很好的妥协:
" Reset highlighted searchnnoremap <CR> :let @/=""<CR><CR>
按输入,突出显示的文本不再突出显示,而搜索突出显示仍然启用。
提出:noh或#1的答案(例如,Matt McMinn的)对于暂时禁用搜索突出显示是正确的-正如原始问题中所问。
我想我应该贡献一个在正常模式下有用的映射:
nnoremap <C-L> :nohlsearch<CR><C-L>
默认情况下,Vim中的CtrlL清除并重新绘制屏幕。许多命令行程序(主要是使用GNU Readline库的程序,例如Bash)使用相同的组合键来清除屏幕。此功能在后台运行的进程打印到终端的情况下很有用,覆盖了前台进程的部分内容。
这个正常模式映射也在重绘屏幕之前清除了最近搜索词的突出显示。我发现这两个功能相辅相成,一起使用一个CtrlL来执行这两个操作很方便,而不是创建一个单独的映射来禁用搜索突出显示。
使用NB:noremap而不是map,否则映射将是递归的。
noremap
map
提示:我通常重新映射大写锁定到Ctrl,以便更容易键入这样的组合键;这样做的细节取决于您选择的操作系统/窗口系统(并且与本答案无关)。以下两个提示都包括有关映射大写锁定到Ctrl以及Esc的信息:
这是我使用的(从许多不同的问题/答案中提取):
nnoremap <silent> <Esc><Esc> :let @/=""<CR>
使用“双”Esc,您可以删除突出显示,但一旦您再次搜索,突出显示就会重新出现。
另一种选择:
nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>
根据vim留档:
clearMatch() Clears all matches previously defined by |matchadd()| and the |:match| commands.
clearMatch()
Clears all matches previously defined by |matchadd()| and the |:match| commands.
通过组合2个热门答案再提供一个解决方案:
"To clear the last used search pattern:nnoremap <F3> :let @/ = ""<CR>
如果您希望能够启用/禁用突出显示迅速,您可以将键映射到
" 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
每次使用///kbd>进行搜索时,匹配项都不会突出显示
:set nohlsearch
或:nohlsearch(清除直到n或N被按下)
:nohlsearch
nnoremap <esc> :noh<return><esc>
按\(反斜杠)时清除高亮
nnoremap \ :noh<return>
Clear highlights on hitting ESC twice
nnoremap <esc><esc> :noh<return>
您可以使用不再映射打开/关闭搜索结果,如下所示
:noremap <F3> :set hls! hls?<CR>
关闭高亮显示直到下一次搜索
有两个“必须有”插件:
Ctrl-l
[oh
]oh
coh
基于@baruch-ven答案,您可以在正常模式下使用ESC双击删除搜索词:
nnoremap <esc> :let @/ = ""<return><esc>nnoremap <esc>^[ <esc>^[
如果您安装了incsearch.vim插件,则有一个设置可以在搜索后自动清除突出显示:
let g:incsearch#auto_nohlsearch = 1
我只是使用下面的简单nohl,不需要插件。
:nohl
我的猜测是,最初的问题与禁用搜索突出显示无关,而是简单地清除上次搜索中的突出显示。搜索胡言乱语字符串的解决方案,最初的海报提到了,我已经使用了一段时间来清除之前搜索中的突出显示,但它很丑陋和麻烦。
我发现了一些将nnoremap ...添加到~/. vimrc的建议,其效果是在启动时将vim置于替换模式,这根本不是我想要的。我发现的最简单的解决方案是添加以下行
nnoremap ...
nmap <esc><esc> :noh<return>
到我的~/. vimrc。这遵循了KISS原则,不会干扰箭头键,使用单个会干扰箭头键。在命令模式下需要双-(或从插入或替换模式下需要三-)来清除先前搜索中的突出显示,但从UI的角度来看,这使得操作尽可能简单。
安装vim酷。它是为解决此特定问题而创建的。一旦您移动光标,它就会关闭突出显示。但请注意,它需要最新的vim版本!
我在我的~/.vimrc中使用以下内容
~/.vimrc
nnoremap <Leader><space> :noh<Enter>
这使得清除当前突出显示的搜索非常容易和快速。我的leader键映射到\,因此这使得我的右手小指和拇指非常容易执行该操作。
我个人喜欢将esc映射到命令:noh如下:
esc
map <esc> :noh<cr>
我最近写了一篇关于Vim搜索的文章:如何在vanilla Vim上搜索以及增强搜索功能的最佳插件。
我也不喜欢它。我发现一直输入:nohl很无聊…所以我把下面的映射放在我的.vimrc中
.vimrc
noremap <C-_> :nohl<cr>:<backspace>
第一位(:nohl<cr>)清除突出显示;第二位(:<backspace>)是命令行干净的技巧。搜索仍然在后台,所以如果你只是点击n,它会重新突出显示并带你到下一个出现。
:nohl<cr>
:<backspace>
n
我把它添加到我的vimrc文件中。
vimrc
command! H let @/=""
在您进行搜索并希望从搜索中清除亮点后,只需执行:H
:H
您也可以在. vimrc文件上添加映射,
nmap<C-N>: nohlsearch
<C-N>
然后你就可以按下
Ctrl+N
随时清除突出显示的文本
不喜欢nohlsearch的任何解决方案,下一次搜索怎么办?最好的答案是由let @/ = ";"创建,但我不喜欢mac上的map by函数键,所以这是我的:
let mapleader=','let g:mapleader=','nnoremap <leader>cs :let @/ = ""<cr>
" use double-Esc to completely clear the search buffernnoremap <silent> <Esc><Esc> :let @/ = ""<CR>" use space to retain the search buffer and toggle highlighting off/onnnoremap <silent> <Space> :set hlsearch!<CR>