在插入模式下,Ctrlr/(参见:h "/
)将粘贴搜索寄存器的内容。但是,如果你用*搜索寄存器搜索一个词并粘贴,它会放入特殊的词边界字符\<
和\>
。或者,如果你幸运的话,你可能会得到 ' \Vsearch
。我认为这很愚蠢,但我确信 VIM 有它让我的生活变得更艰难的原因。如果没有特殊的 vim 魔术字符,我将如何获取搜索寄存器的内容?
问问题
408 次
2 回答
1
为什么您希望搜索寄存器包含除先前搜索模式之外的任何其他内容?@/
包含模式,而不是匹配。
如果你这样做/\Vfoo*bar
是正常的,并且预计你会\Vfoo*bar
进入/
登记册。与/foo\*bar
你得到的地方一样foo\*bar
……搜索寄存器的要点是要重复使用以进行进一步的搜索和替换:如果它包含foo*bar
而不是\Vfoo*bar
,你不能做n
or N
or :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 回答