来自脚本的 Vim 搜索和高亮控制
Posted
技术标签:
【中文标题】来自脚本的 Vim 搜索和高亮控制【英文标题】:Vim search and highlighting control from a script 【发布时间】:2011-04-15 12:19:38 【问题描述】:我正在编写一个脚本,我想在其中以编程方式控制搜索,并突出显示它们。 search() 函数的结果没有突出显示(我认为),所以使用该函数对我没有用。
我想做的是使用“普通/”命令来搜索变量,但这似乎并不简单。我可以编写命令:
execute 'normal /' . my_variable . '\<CR>'
(或这里 vim 提示中建议的其他变体:http://vim.wikia.com/wiki/Using_normal_command_in_a_script_for_searching)
但它什么也没做。执行脚本行后,我可以在命令行下看到正确的搜索词,但焦点在文档中,搜索寄存器没有改变,光标也没有进行任何搜索。 (看起来好像 没有被输入,虽然没有抛出错误——是的,我也尝试过使用文字 ^M。)
我至少可以通过这样做来控制搜索寄存器:
execute 'let @/ ="' . a:term .'"'
然后显而易见的事情似乎是做一个:
normal n
但是,如果我在脚本中运行“正常 n”,它不会做任何事情。设置搜索寄存器确实有效,如果我在脚本终止搜索发生后手动按“n”(并突出显示,因为 hlsearch 已打开)。我什至不在乎光标是否定位,我只想突出显示寄存器模式。但是脚本中“set hlsearch”的各种组合也不起作用。
我知道我可以使用“match()”,但我想让它与常规搜索突出显示一起使用,我想知道我做错了什么。它一定很简单,但我没有看到。感谢您的帮助。
【问题讨论】:
我已经尝试了我的搜索命令。execute "normal /^---\<CR>"
有效。但execute 'normal /^---\<CR>'
没有。
【参考方案1】:
运行:
让@/ = a:searchStr
从你的函数内部然后运行
正常的n
从你的函数之外(在它内部什么都不做)例如。
command -nargs=* Hs 调用 MySearch() |正常的n
或者你可以使用:
设置 hlsearch
如果你不希望光标移动,而不是正常的 n
(如果没有函数之外的东西,我无法找到另一种方法。)
【讨论】:
我找这个很久了。这对谷歌来说是一件很难的事情。您的回答完美无缺,完全符合我的要求!【参考方案2】:仔细检查后,似乎\<CR>
没有在单引号内出现。尝试改用这个:
execute 'normal /' . my_variable . "\<CR>"
【讨论】:
谢谢。我很确定这是我尝试的第一件事,但没有奏效。我认为您在其他答案中遇到了问题,您在其中发现了修改函数中的搜索模式的问题。我遇到问题的所有命令都在一个函数中,所以我会检查一下以确认。【参考方案3】:如果您的脚本正在使用函数,那么来自:help function-search-undo
的引用是相关的:
最后使用的搜索模式和重做命令“.” 不会被函数改变。这也是 意味着 :nohlsearch 的效果被撤销 当函数返回时。
Vim 通常会在函数结束时尝试重置搜索模式(以及其他一些事情),通常您可以通过在映射末尾添加 n
(下一次搜索)或使用 @987654323 来解决这个问题@ 并让您的函数返回要执行的键序列。
【讨论】:
以上是关于来自脚本的 Vim 搜索和高亮控制的主要内容,如果未能解决你的问题,请参考以下文章