想要改进这篇文章?提供这个问题的详细答案,包括引文和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。
在 Vim 中进行搜索后,我会突出显示所有出现的事件。我怎样才能禁用它?我现在再次搜索无法找到的乱码。
有没有办法暂时禁用突出显示,然后在需要时重新启用它?
nnoremap <esc> :noh<return><esc>
解决方案在 GUI vim 中运行良好,但在终端中运行 vim 时会导致箭头键和其他 ESC 编码键出现问题。 不要将其放入您的 ~/.vimrc
中而不将其包装在 if has('gui_running')
... end
中。
要在下一次搜索之前关闭突出显示:
:noh
或者完全关闭突出显示:
set nohlsearch
或者,切换它:
set hlsearch!
nnoremap <F3> :set hlsearch!<CR>
要清除上次使用的搜索模式:
:let @/ = ""
这不会将模式设置为空字符串,因为它会在任何地方匹配。模式真的很清晰,就像启动 Vim 时一样。
:command C let @/=""
使用此命令可让您键入 :C
以清除搜索字符串... 非常快,不会影响以后的搜索或突出显示。
:he registers
)的 vim 帮助。 Vim 有几个不同的内置寄存器来保存文本,有时用于提取数据,有时用于最后搜索等。当您进行搜索时,vim 将模式放入“/”寄存器中,您可以使用 @/
引用它。您还可以使用 @regname=value
为寄存器分配值,其中 regname
是寄存器的名称。因此,@/=""
只是将寄存器 "/" 设置为空字符串(除了 "/" 寄存器,如果它包含空字符串,vim 将清除最后一次搜索)。
noremap <silent> <c-_> :let @/ = ""<CR>
你可以做
:noh
或 :nohlsearch
暂时禁用搜索突出显示,直到下一次搜索。
几年前我在 vim.org 上找到了这个答案:
将以下内容添加到您的 .vimrc 中:
"This unsets the "last search pattern" register by hitting return
nnoremap <CR> :noh<CR><CR>
因此,在您搜索后,只需在命令模式下再次按回车键,突出显示就会消失。
n
查找下一个匹配项(将再次突出显示)。顺便说一句,在编写脚本时,我会避免使用缩写形式,而是写 :nohlsearch
。
来自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 内部使用转义来表示特殊键。
我最初的解决方案(下)是肮脏和浪费的。我现在使用 :noh
像 Vim 中的许多特性一样,正确的方法通常不容易被发现。
--
(不要这样做)
搜索一个不太可能的字符序列(混合主行上的键):
/;alskdjf;
这适用于 vim 和更少,并且比@ShaunBouckaert 逻辑上更简洁的解决方案“清除最后使用的搜索模式”更容易记住/输入:
:let @/ = ""
一个潜在的缺点是它会在您的搜索历史记录中添加垃圾内容。
:nohl
命令之前会使用的解决方案。一旦我了解了后者,我立即停下来进行这些搜索。
/$4
。它不仅不可能匹配任何东西,而且实际上完全不可能。 $
必须始终跟在换行符之后或者是文件的结尾,并且 4 既不是换行符也不是文件的结尾。 (具体是4的原因,就是在同一个键上,所以打字真的很方便)
提出 :noh
或 :nohlsearch
的答案(例如,Matt McMinn 的)对于 暂时禁用搜索突出显示是正确的 - 正如在原始问题中所问的那样。
我想我会贡献一个我觉得在普通模式下有用的映射:
nnoremap <C-L> :nohlsearch<CR><C-L>
默认情况下,Vim 中的 CtrlL 清除并重绘屏幕。许多命令行程序(主要是那些使用 GNU Readline library 的程序,例如 Bash)使用相同的组合键来清除屏幕。此功能在后台运行的进程打印到终端,覆盖前台进程的部分的情况下很有用。
此正常模式映射还会在重绘屏幕之前清除最近搜索词的突出显示。我发现这两个功能相辅相成,将一个 CtrlL 一起用于两个操作而不是创建单独的映射来禁用搜索突出显示很方便。
注意: 使用 noremap
而不是 map
,否则映射将是递归的。
提示:我通常将 Caps Lock 重新映射为 Ctrl,以便更轻松地键入此类组合键;执行此操作的详细信息取决于您选择的操作系统/窗口系统(并且与此答案无关)。以下两个提示都包括有关将 Caps Lock 映射到 Ctrl 以及 Esc 的信息:
地图大写锁定以在 XWindows 中转义
地图大写锁定以在 Windows 中转义
nnoremap silent <cr> :noh<cr><cr>
这样,在搜索后点击 enter 时,我就摆脱了命令行中显示的 :noh
。
就像开始输入一个新命令,Backspace 将其清除并将焦点放回编辑器窗口。
[a-z]
和此类字符上使用 shift。
:<Backspace>
,你可以在 nnoremap
之后添加 <silent>
来告诉 Vim 不要在命令区域显示任何输出:nnoremap <silent> <cr> :noh<CR><CR>
。
重新映射到我的 .vimrc.local 文件中,快速而肮脏但非常实用:
" Clear last search highlighting
map <Space> :noh<cr>
永久禁用搜索突出显示
每当您使用 / 进行搜索时,匹配项都不会突出显示
:set nohlsearch
清除突出显示直到下一次搜索
:noh
或 :nohlsearch
(清除直到按下 n 或 N)
按 ESC 清除突出显示
nnoremap <esc> :noh<return><esc>
按另一个键或自定义地图清除突出显示
按 \ (反斜杠) nnoremap \ :noh
按两次 ESC 清除高亮显示 nnoremap
nnoremap <silent> <esc> :noh<return><esc>
解决方案在 GUI vim 中运行良好,但在终端中运行 vim 时会导致严重问题使用箭头键和其他 ESC 编码键。 不要将其放入您的 ~/.vimrc
中而不将其包装在 if has('gui_running')
... end
中。还可以考虑添加 <silent>
以避免在状态栏中闪烁 :noh
命令。
我通常将 :noh
映射到反斜杠键。要重新启用突出显示,只需点击 n,它将再次突出显示。
这就是我使用的(从许多不同的问题/答案中提取):
nnoremap <silent> <Esc><Esc> :let @/=""<CR>
使用“double” Esc 可以删除突出显示,但是一旦再次搜索,突出显示就会重新出现。
另一种选择:
nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>
根据 vim 文档:
clearmatches() 清除之前由|matchadd()| 定义的所有匹配项。和 |:match|命令。
.vimrc
并将以下条目放入其中:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
@/=""
清除搜索寄存器的副作用是使 n
无法恢复您的搜索。我更喜欢 :noh
,它将先前的搜索保留在寄存器中以供重复使用。
关闭突出显示直到下一次搜索
:noh
https://i.stack.imgur.com/Skzzj.gif
移动光标后立即关闭突出显示:
安装 vim-cool。它的创建是为了解决这个特定问题。只要您移动光标,它就会关闭突出显示。但请注意,它需要最新的 vim 版本!
为此有两个“必备”插件:
明智的 - Ctrl-l 用于 nohlsearch 和重绘屏幕。 unimpared - [oh, ]oh 和 coh 来控制 hlsearch。
co
更改为 yo
,所以它是 yoh
。请参阅 github.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txt 和 github.com/tpope/vim-unimpaired/issues/150
coh
仍然有效,但如果您使用 coh
,则会有一条消息建议您使用 yoh
如果您安装了 incsearch.vim plugin,则有一个设置可以在搜索后自动清除突出显示:
let g:incsearch#auto_nohlsearch = 1
https://i.stack.imgur.com/75EF2.gif
Janus for VIM and GVIM 为像我这样的新手准备了很多东西,包括
<leader>hs - toggles highlight search
这正是您所需要的。只需在正常模式下键入 \hs
。 (leader key 默认映射到 \
。)
HTH。
我的猜测是,最初的问题不是禁用搜索突出显示,而是简单地清除上次搜索的突出显示。原始发帖人提到的搜索乱码字符串的解决方案是我已经使用一段时间来清除先前搜索中的突出显示的解决方案,但它既丑陋又麻烦。
我发现将 nnoremap ...
添加到 ~/.vimrc 的几个建议在这里具有在启动时将 vim 置于替换模式的效果,这根本不是我想要的。我找到的最简单的解决方案是添加该行
nmap <esc><esc> :noh<return>
到我的 ~/.vimrc。这符合 KISS 原则,并且不会干扰使用单个
nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
我个人喜欢将 esc
映射到命令 :noh
,如下所示:
map <esc> :noh<cr>
I wrote a whole article recently about Vim search:如何在 vanilla Vim 上搜索以及增强搜索功能的最佳插件。
这将在 updatetime
毫秒不活动后清除搜索突出显示。
updatetime
默认为 4000 毫秒或 4 秒,但我将我的设置为 10 秒。请务必注意,updatetime
的功能不止于此,因此请在更改之前阅读文档。
function! SearchHlClear()
let @/ = ''
endfunction
augroup searchhighlight
autocmd!
autocmd CursorHold,CursorHoldI * call SearchHlClear()
augroup END
如果您希望能够快速启用/禁用突出显示,您可以将一个键映射到
" 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>
@/=""
清除搜索寄存器的副作用是使 n
无法恢复您的搜索。我更喜欢 :noh
,它将先前的搜索保留在寄存器中以供重复使用。您可以使用 nnoremap <F3> :noh<CR>
将 <F3>
绑定到
你可以使用 :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>^[
<esc>
在 GUI vim 中运行良好,但在终端中运行 vim 时会导致严重问题与箭头键和其他 ESC 编码键。 不要将其放入您的 ~/.vimrc
中而不将其包装在 if has('gui_running')
... end
中。还可以考虑添加 <silent>
以避免在状态栏中闪烁 :noh
命令。
我也不喜欢。我发现一直输入 :nohl
很烦人......所以我将以下映射放在我的 .vimrc
noremap <C-_> :nohl<cr>:<backspace>
第一位 (:nohl<cr>
) 清除突出显示;第二位 (:<backspace>
) 是 clean 命令行的技巧。搜索仍在后台,因此如果您只需点击 n
,它就会重新突出显示并带您到下一个搜索项。
为这两种行为定义映射,因为两者都很有用!
完全清除搜索缓冲区(例如,按 n 进行下一个匹配将不会恢复搜索)
保留搜索缓冲区,并切换突出显示搜索结果 on/off/on/...(例如,按 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>
hjkl
的箭头键 :)
<silent>
之前加上 <nowait>
<esc>
通常会在退出插入模式时导致烦人的延迟。请参阅vi.stackexchange.com/questions/16148/…。
我将此添加到我的 vimrc
文件中。
command! H let @/=""
在您进行搜索并想要清除搜索中的亮点后,只需执行 :H
不定期副业成功案例分享
set nohlsearch
也会禁用下一次搜索的突出显示。:noh
的行为非常不同:当您执行新搜索时,甚至当您执行与当前搜索相关的操作时(例如,当您键入n
转到下一项时),突出显示将自动重新启用。nmap <silent> <C-L> <C-L>:nohlsearch<CR>:match<CR>:diffupdate<CR>
nnoremap <nowait><silent> <C-C> :noh<CR>
。nnoremap
。是的,你应该把它放在你的 .vimrc 中。我不明白你的问题,因为下次你在键盘上敲/
并输入一个新的关键字进行搜索时,旧的都被替换了,所以你只需在每次搜索后由<C-C>
自己清理.