:nohlsearch
时,它实际上并没有执行与:set nohlsearch
相同的操作。 特别地,实际上并未关闭
hlsearch
设置(这是:set hlsearch
所完成的)。 演示我的意思:
:set hlsearch
:nohlsearch
:echo &hlsearch
此打印
1
(hlsearch仍然设置!):set hlsearch
:set nohlsearch
:echo &hlsearch
这样会打印出
0
,因为我们使用了标准方法关闭了hlsearch,从而关闭了vim中的设置。所以我有点纳闷,因为必须有一些实际的
:nohlsearch
ex命令存在的原因。 我关心的原因是,我现在需要在vim脚本中测试搜索突出显示是否处于活动状态,并且由于我在其他脚本中使用
:nohlsearch
而不是“:set nohlsearch” ,我的&hlsearch
测试始终返回1
。因此,我想知道不再通过使用nohlsearch
ex命令来更改什么。#1 楼
来自:h :nohlsearch
:noh :nohlsearch :noh[lsearch] Stop the highlighting for the 'hlsearch' option. It is automatically turned back on when using a search command, or setting the 'hlsearch' option. This command doesn't work in an autocommand, because the highlighting state is saved and restored when executing autocommands autocmd-searchpat. Same thing for when invoking a user function.
关键是,当您开始新的搜索时,它将自动重新打开突出显示。
:set nohlsearch
实际上关闭了hlsearch
,这意味着下次搜索没有突出显示的内容。示例:假设
hlsearch
已打开,如果当前正在缓冲区中搜索“ hello”,则所有“ hello” “将突出显示。如果使用:nohlsearch
,则不会突出显示任何内容。但是,如果您随后搜索“世界”,则所有“世界”都将突出显示。如果使用的是set nohlsearch
,则“ world”将不会突出显示。还要注意,该命令在用户功能内基本不执行任何操作。例如,
function! NoHlsearch()
nohlsearch
endfunction
运行时没有可见的效果。
要查看hlsearch是否实际上是活动的,您要检查变量
v:hlsearch
。当v:hlsearch = 0
高亮显示关闭时,以及v:hlsearch = 1
高亮显示打开时。在检查&hlsearch = 1
之前,您可能应该先确定v:hlsearch
。从
:h v:hlsearch
开始v:hlsearch hlsearch-variable v:hlsearch Variable that determines whether search highlighting is on. Makes sense only if 'hlsearch' is enabled which requires +extra_search. Setting this variable to zero acts the like :nohlsearch command, setting it to one acts like let &hlsearch = &hlsearch
#2 楼
您的脚本是否要求知道突出显示的当前状态?仅在当前搜索中关闭
hlsearch
,我在我的.vimrc中使用Ctrl-l
:nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>
使用上述命令时,搜索突出显示将返回下一次搜索。
Ctrl-l
很方便,因为它的正常用法是清除并重新绘制屏幕。要永久性地打开或关闭搜索突出显示状态,我将F3用作切换开关:
nnoremap <F3> :set hlsearch! hlsearch?<CR>
评论
您能否从函数内部阐明“基本没有”的含义?它确实执行标准操作(它暂时停止突出显示搜索,直到下次调用搜索为止)。
–陆even
2015年5月2日,0:33
我也希望找到一种方法来访问用于控制瞬态:nohlsearch是否有效的标志...我想在没有它的情况下,我必须诉诸于使用变量来跟踪所有:nohlsearch调用。
–陆even
2015年5月2日,0:37
@StevenLu参见编辑。
–FDinoff
2015年5月2日,0:41
谢谢。看起来我一直在通过以下方式来解决“基本无所作为”方面的代码:nnoremap
–陆even
2015年5月2日,0:46