2

在插入模式下,Ctrlr/(参见:h "/)将粘贴搜索寄存器的内容。但是,如果你用*搜索寄存器搜索一个词并粘贴,它会放入特殊的词边界字符\<\>。或者,如果你幸运的话,你可能会得到 ' \Vsearch。我认为这很愚蠢,但我确信 VIM 有它让我的生活变得更艰难的原因。如果没有特殊的 vim 魔术字符,我将如何获取搜索寄存器的内容?

4

2 回答 2

1

为什么您希望搜索寄存器包含除先前搜索模式之外的任何其他内容?@/包含模式,而不是匹配。

如果你这样做/\Vfoo*bar是正常的,并且预计你会\Vfoo*bar进入/登记册。与/foo\*bar你得到的地方一样foo\*bar……搜索寄存器的要点是要重复使用以进行进一步的搜索和替换:如果它包含foo*bar而不是\Vfoo*bar,你不能做nor Nor :s//baz,这会让每个人的生活变得更加艰难。

由于没有verynomagic选项可以在你的~/.vimrc我猜你可以在粘贴之前对寄存器的内容进行替换。

fee faa foo*bar baz bam
/\Vfoo*bar<CR>
:reg /<CR>
\Vfoo*bar
:let @a = substitute(@\, '\\V', '', '')<CR>
"ap
foo*bar

也许您可以创建一个一次性完成替换和粘贴的映射。

但我有一种预感,你真正想要的是重用匹配的文本,而不是搜索模式。如果我是对的,请参阅此提示以获取可能的解决方案。

于 2012-10-01T07:12:21.250 回答
1

搜索寄存器可能包含 no(简单/foo搜索)、少数(\<cword\>从 * 命令搜索)或很多(^\%(foo\|bar\)\w\+!\?)“特殊字符”。对于前两个,通常只有一个匹配,对于最后一个,可以有多个匹配。

最初我使用过滤掉特殊正则表达式原子的映射,但后来我编写了一个更通用的PatternComplete 插件(刚刚发布),它提供插入模式和命令行映射来插入匹配项。它还允许您输入正则表达式,然后插入所有匹配项。

于 2012-10-01T08:10:26.243 回答