在插入模式下, Ctrl r / (请参阅:h "/
)将粘贴搜索寄存器的内容。但是,如果您使用 * 搜索单词并粘贴搜索寄存器,它将放入特殊字边界字符\<
和\>
。或者,如果你很幸运,你可能会得到'\Vsearch
。我认为这很愚蠢,但我确信VIM有理由让我的生活更加艰难。如果没有特殊的vim魔术字符,我怎样才能获取搜索寄存器的内容?
答案 0 :(得分:1)
为什么您希望搜索寄存器包含完全之前的搜索模式? @/
包含模式,而不是匹配。
如果您执行/\Vfoo*bar
这是正常的,并且预计会在\Vfoo*bar
注册表中获得/
。对于/foo\*bar
,foo\*bar
也是如此...搜索寄存器的点将被重复用于进一步搜索和替换:如果它包含foo*bar
而不是\Vfoo*bar
,你无法做n
或N
或: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(刚刚发布),它提供了插入模式和命令行映射来插入火柴)。它还允许您输入正则表达式,然后插入所有匹配项。