来自脚本的 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 /^---\&lt;CR&gt;" 有效。但execute 'normal /^---\&lt;CR&gt;' 没有。 【参考方案1】:

运行:

让@/ = a:searchStr

从你的函数内部然后运行

正常的n

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

command -nargs=* Hs 调用 MySearch() |正常的n

或者你可以使用:

设置 hlsearch

如果你不希望光标移动,而不是正常的 n

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

【讨论】:

我找这个很久了。这对谷歌来说是一件很难的事情。您的回答完美无缺,完全符合我的要求!【参考方案2】:

仔细检查后,似乎\&lt;CR&gt; 没有在单引号内出现。尝试改用这个:

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

【讨论】:

谢谢。我很确定这是我尝试的第一件事,但没有奏效。我认为您在其他答案中遇到了问题,您在其中发现了修改函数中的搜索模式的问题。我遇到问题的所有命令都在一个函数中,所以我会检查一下以确认。【参考方案3】:

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

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

Vim 通常会在函数结束时尝试重置搜索模式(以及其他一些事情),通常您可以通过在映射末尾添加 n(下一次搜索)或使用 @987654323 来解决这个问题@ 并让您的函数返回要执行的键序列。

【讨论】:

以上是关于来自脚本的 Vim 搜索和高亮控制的主要内容,如果未能解决你的问题,请参考以下文章

vim 搜索和替换仅限于可视块模式下的高亮

[转帖]vim搜索及高亮取消

搜索文本后去掉 Vim 的高亮

如何摆脱 Vim 中的搜索高亮显示

让vi高亮显示搜索结果(macOS)

如何切换 Vim 的搜索高亮可见性而不禁用它