:nohlsearch和:set nohlsearch之间的功能区别是什么?


13

我注意到当我使用:nohlsearch它时,它实际上并没有执行与相同的操作:set nohlsearch

特别是,hlsearch设置实际上并没有关闭(即:set hlsearch完成)。

为了说明我的意思:

:set hlsearch
:nohlsearch
:echo &hlsearch

此打印1hlsearch仍然设置!

:set hlsearch
:set nohlsearch
:echo &hlsearch

0之所以打印出来,是因为我们使用了在vim中关闭设置的标准方法来关闭了hlsearch。

所以我有点纳闷,因为:nohlsearchex命令必须存在一些实际原因。

我关心的原因是,我现在需要在vim脚本中测试搜索突出显示是否处于活动状态,并且由于我:nohlsearch在其他脚本中使用的不是“:set nohlsearch”,所以&hlsearch测试始终返回1。因此,我想知道不再通过使用nohlsearchex命令来进行更改。

Answers:


15

:h :nohlsearch

                                                        :noh:nohlsearch
:noh [lsearch]停止突出显示'hlsearch'选项。它
                        搜索时会自动重新打开
                        命令,或设置“ hlsearch”选项。
                        该命令在自动命令中不起作用,因为
                        突出显示状态在以下情况下保存和恢复
                        执行自动命令autocmd-searchpat。
                        调用用户功能时也是如此。

关键是,当您开始新的搜索时,它将自动重新打开高亮显示。: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确定是否突出显示搜索突出显示的变量。
                仅在启用“ hlsearch”(要求
                + extra_search。将此变量设置为零会像
                :nohlsearch命令,将其设置为类似于
                        让&hlsearch =&hlsearch

您能否从函数内部阐明“基本没有”的含义?它确实执行标准操作(它暂时停止突出显示搜索,直到下次调用搜索为止)。
史蒂文·卢

我也希望排序找到一种方法来访问控制瞬态是否标志的:nohlsearch生效或不...我想在它的缺席我不得不求助于跟踪所有的:nohlsearch具有可变电话。
史蒂文·卢

@StevenLu参见编辑。
FDinoff 2015年

谢谢。看起来我一直在通过以下方式在“基本上什么都不做”方面使用hack的代码:nnoremap <silent> <expr> <boundkey> SearchHighlight()where SearchHighlight()可能返回string ":silent nohlsearch\<CR>"。也感谢您的v:hlsearch提示,正是我所需要的。
史蒂文·卢

1

您的脚本是否要求知道突出显示的当前状态?

hlsearch仅对当前搜索关闭,请Ctrl-l在.vimrc中使用,并使用:

nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

使用上述命令时,搜索突出显示将返回下一个搜索。Ctrl-l之所以方便是因为它的正常用法是清除并重新绘制屏幕。

要持续更改搜索突出显示状态,请使用F3作为切换开关:

nnoremap <F3> :set hlsearch! hlsearch?<CR>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.