我正在编写一个脚本,我想以编程方式控制搜索,并突出显示它们。 search()函数结果没有突出显示(我认为),因此使用该函数对我没用。
我想要做的是使用'normal /'命令来搜索变量,但这似乎并不简单。我可以编写命令脚本:
execute 'normal /' . my_variable . '\<CR>'
(或此处vim提示中建议的其他变体:http://vim.wikia.com/wiki/Using_normal_command_in_a_script_for_searching)
但它没有做任何事情。执行脚本行后,我可以在命令行中看到正确的搜索项,但焦点位于文档中,搜索寄存器未被更改,并且光标未进行任何搜索。 (似乎&lt; CR&gt;没有进入,虽然没有抛出错误 - 是的,我也试过使用文字^ M。)
我至少可以通过这样做控制搜索寄存器:
execute 'let @/ ="' . a:term .'"'
然后显而易见的事情似乎是:
normal n
但是,如果我在脚本中运行它,那么'正常n'不会做任何事情。设置搜索寄存器确实有效,如果我在脚本终止后手动按'n'进行搜索(并且出现高亮显示,因为hlsearch已打开)。我甚至不关心光标是否定位,我只想突出显示寄存器模式。但是脚本中'set hlsearch'的各种组合也不起作用。
我知道我可以使用'match()',但我想让它与常规搜索突出显示,我想知道我做错了什么。它必须是简单的东西,但我没有看到它。谢谢你的帮助。
答案 0 :(得分:3)
如果您的脚本使用的是函数,那么:help function-search-undo
的引用是相关的:
最后使用的搜索模式和重做命令“。” 不会被功能改变。这也是 意味着:nohlsearch的效果被撤消 当函数返回时。
当一个函数结束时,Vim通常会尝试重置搜索模式(以及其他一些东西),通常你可以通过将n
(下一个搜索)添加到映射的末尾来解决这个问题,或者使用:map <expr>
让函数返回要执行的键序列。
答案 1 :(得分:3)
运行:
让@ / = a:searchStr
从你的函数内部运行
正常n
来自你的函数外部(里面没有任何作用),例如。
command -nargs = * Hs调用MySearch()|正常n
或者您可以使用:
如果你不想移动光标,设置hlsearch
而不是正常的
(如果没有函数之外的东西,我无法找到另一种方法。)
答案 2 :(得分:1)
仔细观察后,单引号内似乎没有\<CR>
。请尝试使用此代码:
execute 'normal /' . my_variable . "\<CR>"