VIM - 如何粘贴没有特殊字符的搜索寄存器?

时间:2012-10-01 06:33:28

标签: regex search vim

在插入模式下, Ctrl r / (请参阅:h "/)将粘贴搜索寄存器的内容。但是,如果您使用 * 搜索单词并粘贴搜索寄存器,它将放入特殊字边界字符\<\>。或者,如果你很幸运,你可能会得到'\Vsearch。我认为这很愚蠢,但我确信VIM有理由让我的生活更加艰难。如果没有特殊的vim魔术字符,我怎样才能获取搜索寄存器的内容?

2 个答案:

答案 0 :(得分:1)

为什么您希望搜索寄存器包含完全之前的搜索模式? @/包含模式,而不是匹配。

如果您执行/\Vfoo*bar这是正常的,并且预计会在\Vfoo*bar注册表中获得/。对于/foo\*barfoo\*bar也是如此...搜索寄存器的点将被重复用于进一步搜索和替换:如果它包含foo*bar而不是\Vfoo*bar,你无法做nN: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

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

但我确实希望你真正想要的是重复使用匹配的文本,而不是搜索模式。如果我是对的,请参阅this tip了解可能的解决方案。

答案 1 :(得分:1)

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

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