在Vim中进行搜索后,我将所有出现的事件突出显示。如何禁用它?我现在再次搜索找不到的乱码。
有没有一种方法可以暂时禁用突出显示,然后在需要时重新启用它?
nnoremap <esc> :noh<return><esc>
@StewartJohnson建议的解决方案在GUI vim中可以很好地工作,但是在终端中运行vim时,会导致箭头键和其他ESC编码键出现问题。 请勿将它 ~/.vimrc
包裹在if has('gui_running')
...内end
。
在Vim中进行搜索后,我将所有出现的事件突出显示。如何禁用它?我现在再次搜索找不到的乱码。
有没有一种方法可以暂时禁用突出显示,然后在需要时重新启用它?
nnoremap <esc> :noh<return><esc>
@StewartJohnson建议的解决方案在GUI vim中可以很好地工作,但是在终端中运行vim时,会导致箭头键和其他ESC编码键出现问题。 请勿将它 ~/.vimrc
包裹在if has('gui_running')
...内end
。
Answers:
要关闭高亮显示直到下一次搜索:
:noh
或完全关闭突出显示:
set nohlsearch
或者,要切换它:
set hlsearch!
nnoremap <F3> :set hlsearch!<CR>
:noh
效果更好。
set nohlsearch
也会在以后的搜索中禁用突出显示功能。的行为:noh
截然不同:当您执行新搜索时,甚至当您执行与当前搜索相关的操作时(例如,键入n
下一个项目时),突出显示将自动重新启用。
'\/'
(或无论您的领导者是什么):map <Leader>/ :nohlsearch<CR>
:command C let @/=""
使用此命令可以键入内容:C
以清除搜索字符串...非常快速且不会影响以后的搜索或突出显示。
:he registers
)上的vim帮助。Vim有几个不同的内置寄存器,用于保存文本,有时用于存储文本数据,有时用于上一次搜索等。进行搜索时,Vim将模式放在“ /”寄存器中,您可以使用来引用@/
。您还可以使用@regname=value
where regname
是寄存器名称为寄存器分配值。因此,@/=""
只需将寄存器“ /”设置为空字符串(除了对于“ /”寄存器而言,如果vim包含空字符串,它将清除最后的搜索)。
noremap <silent> <c-_> :let @/ = ""<CR>
我几年前在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>^[
需要第二行 映射到转义键因为Vim内部使用转义来表示特殊键。
我原来的解决方案(如下)既脏又浪费。我现在用:noh
像Vim中的许多功能一样,正确的方法通常不容易发现。
-
(不要这样做)
搜索不太可能的字符序列(将主行上的键混在一起):
/;alskdjf;
这在vim中有效且更少,并且比@ShaunBouckaert的逻辑上更清晰的解决方案“清除上次使用的搜索模式”更容易记住/键入:
:let @/ = ""
潜在的弊端是它会在您的搜索记录中添加垃圾内容。
:nohl
命令之前将使用的解决方案。一旦了解了后者,我便立即停止进行这些搜索。
/$4
。匹配任何东西不仅不大可能,而且实际上是完全不可能的。$
必须始终在换行符之后,或者必须在文件末尾,并且4既不是换行也不是文件末尾。(特别是4的原因只是因为它在同一个键上,所以输入起来真的很容易)
nnoremap <cr> :noh<CR><CR>:<backspace>
这样:noh
,在enter搜索后点击时,我便摆脱了命令行中显示的内容。
:就像开始输入新命令一样,Backspace将其清除,然后将焦点放回编辑器窗口中。
[a-z]
等字符。
:<Backspace>
您可以仅在<silent>
后面添加,nnoremap
以告诉Vim在命令区域中不显示任何输出,而不是这样做nnoremap <silent> <cr> :noh<CR><CR>
。
建议:noh
或的答案:nohlsearch
(例如,Matt McMinn的答案)对于暂时禁用搜索突出显示是正确的-如原始问题中所述。
我以为我会贡献一个在普通模式下有用的映射:
nnoremap <C-L> :nohlsearch<CR><C-L>
默认情况下,CtrlLVim会清除并重画屏幕。许多命令行程序(大多数是使用GNU Readline库的程序,例如Bash)使用相同的组合键来清除屏幕。在后台运行的进程打印到终端,覆盖前台进程的某些部分的情况下,此功能很有用。
在重新绘制屏幕之前,此“普通”模式映射还清除了最近搜索词的突出显示。我发现这两个功能是相辅相成的,使用起来很方便CtrlL起来比创建一个单独的映射来禁用搜索突出显示更方便。
注意: noremap
使用而不是map
其他方式,映射将是递归的。
提示:我通常会重新映射Caps Lock以Ctrl使其更容易键入此类组合键;执行此操作的详细信息取决于您选择的OS /窗口系统(对于此答案而言,该主题是不正确的)。以下两个技巧均包含有关映射Caps Lock到的信息 Ctrl以及Esc:
您使用进行搜索时,匹配项不会突出显示 /
:set nohlsearch
:noh
或:nohlsearch
(清除直到n或被N按下)
nnoremap <esc> :noh<return><esc>
按下时清除高光\(反斜杠)
nnoremap \ :noh<return>
击中ESC两次时的亮点
nnoremap <esc><esc> :noh<return>
nnoremap <silent> <esc> :noh<return><esc>
解决方案在GUI vim上运行良好,但是在终端上运行vim时,会导致箭头键和其他ESC编码键严重问题。 请勿将它 ~/.vimrc
包裹在if has('gui_running')
...内end
。还可以考虑添加,<silent>
以避免:noh
在状态栏中闪烁命令。
这是我使用的(从许多不同的问题/答案中摘录):
nnoremap <silent> <Esc><Esc> :let @/=""<CR>
使用“双精度” Esc可以删除突出显示的内容,但是一旦再次搜索,突出显示的内容就会重新出现。
另一种选择:
nnoremap <silent> <Esc><Esc> :noh<CR> :call clearmatches()<CR>
根据vim文档:
clearmatches()
Clears all matches previously defined by |matchadd()| and the |:match| commands.
.vimrc
的内容并将其输入以下内容:nnoremap <silent> <Esc><Esc> :let @/=""<CR>
@/=""
使n
返回的搜索不起作用的副作用。我更喜欢:noh
将先前的搜索保留在寄存器中以供重复使用。
Janus for VIM和GVIM为像我这样的新手准备了很多烘焙工具,包括
<leader>hs - toggles highlight search
这正是您所需要的。只需\hs
在普通模式下输入即可。(领导键\
默认情况下映射到。)
HTH。
如果您希望能够快速启用/禁用突出显示,则可以将键映射到
" 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
我的猜测是,最初的问题不是禁用搜索突出显示,而是仅清除上一次搜索中的突出显示。最初的发帖人提到,搜索乱码的解决方案是我一段时间以来一直在使用的一种方法,目的是清除上一次搜索中的突出显示内容,但这很丑陋且麻烦。
我发现要添加nnoremap ...
到〜/ .vimrc中的一些建议可以在启动时将vim置于替换模式,这根本不是我想要的。我找到的最简单的解决方案是添加行
nmap <esc><esc> :noh<return>
到我的〜/ .vimrc。这顺应了KISS原理,并且不会干扰箭头键,使用单个<esc>会起作用。在命令模式下(或在插入或替换模式下为三键<esc>),需要使用double- <esc>来清除先前搜索中的突出显示,但是从UI角度来看,这使操作尽可能简单。
nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting