繁体   English   中英

Vim从脚本中搜索并突出显示控件

[英]Vim search and highlighting control from a script

我正在编写一个脚本,我想以编程方式控制搜索,并突出显示它们。 search()函数结果没有突出显示(我认为),所以使用该函数对我没用。

我想要做的是使用'normal /'命令来搜索变量,但这似乎并不简单。 我可以编写命令脚本:

    execute 'normal /' . my_variable . '\<CR>'

(或vim提示中建议的其他变体: http//vim.wikia.com/wiki/Using_normal_command_in_a_script_for_searching

但它没有做任何事情。 执行脚本行后,我可以在命令行中看到正确的搜索项,但焦点位于文档中,搜索寄存器未被更改,并且光标未进行任何搜索。 (似乎<CR>没有进入,虽然没有抛出错误 - 是的,我也试过使用文字^ M。)

我这样做至少可以控制搜索寄存器:

execute 'let @/ ="' . a:term .'"'

然后显而易见的事情似乎是:

    normal n

但是,如果我在脚本中运行它,那么'正常n'不会做任何事情。 设置搜索寄存器确实有效,如果我在脚本终止后手动按'n'进行搜索(并且出现高亮显示,因为hlsearch已打开)。 我甚至不关心光标是否定位,我只想突出显示寄存器模式。 但是脚本中'set hlsearch'的各种组合也不起作用。

我知道我可以使用'match()',但我想让它与常规搜索突出显示,我想知道我做错了什么。 它必须是简单的东西,但我没有看到它。 谢谢你的帮助。

跑:

让@ / = a:searchStr

从你的函数内部运行

正常的

从你的功能之外(在它内部什么都不做)例如。

命令-nargs = * Hs调用MySearch()| 正常的

或者您可以使用:

设置hlsearch

如果你不想让光标移动,而不是正常的n

(如果没有函数之外的东西,我无法想出另一种方法。)

如果您的脚本使用的是函数,那么引用来自:help function-search-undo是相关的:

最后使用的搜索模式和重做命令“。” 不会被功能改变。 这也意味着当函数返回时,nohlsearch的效果被撤消。

当函数结束时,Vim通常会尝试重置搜索模式(以及其他一些东西),通常可以通过将n (下一个搜索)添加到映射的末尾,或使用:map <expr>并具有你的函数返回要执行的键序列。

仔细观察,似乎\\<CR>没有在单引号内拾取。 请尝试使用此代码:

execute 'normal /' . my_variable . "\<CR>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM