在 Vim 中进行搜索后,我会突出显示所有出现的事件。我怎样才能禁用它?我现在再次搜索无法找到的乱码。
有没有办法暂时禁用突出显示,然后在需要时重新启用它?
在 Vim 中进行搜索后,我会突出显示所有出现的事件。我怎样才能禁用它?我现在再次搜索无法找到的乱码。
有没有办法暂时禁用突出显示,然后在需要时重新启用它?
要在下一次搜索之前关闭突出显示:
:noh
或者完全关闭突出显示:
set nohlsearch
或者,切换它:
set hlsearch!
nnoremap <F3> :set hlsearch!<CR>
几年前我在 vim.org 上找到了这个答案:
将以下内容添加到您的 .vimrc 中:
"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>
因此,在您搜索后,只需在命令模式下再次按回车键,突出显示就会消失。
来自http://twitter.com/jonbho/status/2194406821
" Clear highlighting on escape in normal mode
nnoremap <esc> :noh<return><esc>
nnoremap <esc>^[ <esc>^[
第二行用于映射到转义键,因为 Vim 内部使用转义来表示特殊键。
我最初的解决方案(下)是肮脏和浪费的。我现在用:noh
像 Vim 中的许多特性一样,正确的方法通常不容易被发现。
--
(不要这样做)
搜索一个不太可能的字符序列(混合主行上的键):
/;alskdjf;
这适用于 vim 和更少,并且比@ShaunBouckaert 逻辑上更简洁的解决方案“清除最后使用的搜索模式”更容易记住/输入:
:let @/ = ""
一个潜在的缺点是它会在您的搜索历史记录中添加垃圾内容。
重新映射到我的 .vimrc.local 文件中,快速而肮脏但非常实用:
" Clear last search highlighting
map <Space> :noh<cr>
nnoremap <cr> :noh<CR><CR>:<backspace>
这样,在搜索后:noh
点击时,我就摆脱了命令行中显示的内容enter。
:就像开始输入一个新命令,Backspace清除它并将焦点放回编辑器窗口。
:noh
建议或:nohlsearch
(例如,Matt McMinn 的)的答案对于暂时禁用搜索突出显示是正确的——正如原始问题中所问的那样。
我想我会贡献一个我觉得在普通模式下有用的映射:
nnoremap <C-L> :nohlsearch<CR><C-L>
默认情况下,CtrlL在 Vim 中清除并重绘屏幕。许多命令行程序(主要是那些使用GNU Readline 库的程序,例如 Bash)使用相同的组合键来清除屏幕。此功能在后台运行的进程打印到终端,覆盖前台进程的部分的情况下很有用。
此正常模式映射还会在重绘屏幕之前清除最近搜索词的突出显示。我发现这两个功能相辅相成,将一个CtrlL功能一起用于两个操作很方便,而不是创建一个单独的映射来禁用搜索突出显示。
注意: noremap
使用而不是map
其他方式,映射将是递归的。
提示:我通常会重新映射Caps Lock到Ctrl,以便更轻松地键入此类组合键;执行此操作的详细信息取决于您选择的操作系统/窗口系统(并且与此答案无关)。以下两个提示都包括有关映射 Caps Lock到的信息Ctrl以及Esc:
我通常映射:noh
到反斜杠键。要重新启用突出显示,只需点击n,它将再次突出显示。
每当您使用搜索进行搜索时,匹配项都不会突出显示/
:set nohlsearch
:noh
或:nohlsearch
(清除直到按下n或N)
nnoremap <esc> :noh<return><esc>
按下时清除突出显示\(反斜杠)
nnoremap \ :noh<return>
击中ESC两次清除亮点
nnoremap <esc><esc> :noh<return>
这就是我使用的(从许多不同的问题/答案中提取):
nnoremap <silent> <Esc><Esc> :let @/=""<CR>
使用“double”Esc可以删除突出显示,但是一旦再次搜索,突出显示就会重新出现。
另一种选择:
nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>
根据 vim 文档:
清除匹配()
Clears all matches previously defined by |matchadd()| and the |:match| commands.
安装vim-cool。它的创建是为了解决这个特定问题。只要您移动光标,它就会关闭突出显示。但请注意,它需要最新的 vim 版本!
Vim和 GVIM的 Janus 为像我这样的新手准备了许多东西,包括
<leader>hs - toggles highlight search
这正是您所需要的。只需\hs
在正常模式下输入。(领导键\
默认映射到。)
HTH。
updatetime
这将在几毫秒不活动 后清除搜索突出显示。
updatetime
默认为 4000 毫秒或 4 秒,但我将我的设置为 10 秒。重要的是要注意,updatetime
它的作用远不止于此,因此请在更改之前阅读文档。
function! SearchHlClear()
let @/ = ''
endfunction
augroup searchhighlight
autocmd!
autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
我的猜测是,最初的问题不是禁用搜索突出显示,而是简单地清除上次搜索的突出显示。原始海报提到的搜索乱码字符串的解决方案是我已经使用一段时间来清除先前搜索中的突出显示的解决方案,但它既丑陋又麻烦。
我发现添加nnoremap ...
到 ~/.vimrc 的几个建议在这里具有在启动时将 vim 置于替换模式的效果,这根本不是我想要的。我找到的最简单的解决方案是添加该行
nmap <esc><esc> :noh<return>
到我的 ~/.vimrc。这符合 KISS 原则,并且不会干扰使用单个 <esc> 的箭头键。在命令模式下需要双 <esc>(或在插入或替换模式下使用三重 <esc>)来清除先前搜索的突出显示,但从 UI 的角度来看,这使得操作尽可能简单。
如果您希望能够快速启用/禁用突出显示,您可以将一个键映射到
" 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
我只使用下面的简单 nohl,不需要任何插件。
:nohl
通过结合 2 个最佳答案的另一种解决方案:
"To clear the last used search pattern:
nnoremap <F3> :let @/ = ""<CR>
你可以使用:noremap打开/关闭搜索结果,像这样
:noremap <F3> :set hls! hls?<CR>
我在我的~/.vimrc
nnoremap <Leader><space> :noh<Enter>
这使得清除当前突出显示的搜索变得非常容易和快速。我的引导键已映射到,\
因此这使得用我的右手小指和拇指执行该操作非常容易。
我认为混合@ShaunBouckaert 和 2009 年 3 月 19 日 16:22 的答案是一个很好的折衷方案:
" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>
按下Enter,突出显示的文本不再突出显示,而搜索突出显示仍处于启用状态。
根据@baruch-even 的回答,您可以ESC在正常模式下双击删除搜索词:
nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[
我也不喜欢。我发现一直输入很烦人:nohl
......所以我把下面的映射放在我的.vimrc
noremap <C-_> :nohl<cr>:<backspace>
第一位 ( :nohl<cr>
) 清除突出显示;第二位 ( :<backspace>
) 是清理命令行的技巧。搜索仍然在后台,所以如果你只是点击n
它会重新突出显示并带你到下一个事件。
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>
我将此添加到我的vimrc
文件中。
command! H let @/=""
在您进行搜索并想要清除搜索中的亮点后,只需执行:H
不喜欢 nohlsearch 的任何解决方案,下一个搜索呢?最好的答案是由 let @/ = "" 创建的,但我不喜欢 mac 上的按功能键映射,所以这是我的:
let mapleader=','
let g:mapleader=','
nnoremap <leader>cs :let @/ = ""<cr>
你也可以在你的 .vimrc 文件中添加映射,
nmap
<C-N>
:nohlsearch
然后你可以按
Ctrl+N
随时清除突出显示的文本