vim:在替换中显示子匹配内容和未命名的寄存器

时间:2011-12-28 05:17:39

标签: regex vim substitution

我在命令行中有多个命令,用于在未命名的寄存器@“中构建一个文本字符串。然后我有一个替换来捕获几个原子。最后,我需要用两个子匹配替换一个模式( \ 1和\ 2)和@“。

在第一次显示子匹配后,我无法让@“reg显示其内容。我可以在显示子匹配之前显示@”。例如:

multi-commands | @"=textString | 'a,'bs/(atom1)(atom2)/\1\2 "displays perfectly

或者,

multi-commands | @"=textString | 'a,'bs/(atom1)(atom2)/\=@" "displays 'textString' perfectly

但是,

multi-commands | @"=textString | 'a,'bs/(atom1)(atom2)/\1\2@"
multi-commands | @"=textString | 'a,'bs/(atom1)(atom2)/\1\2\@"
multi-commands | @"=textString | 'a,'bs/(atom1)(atom2)/\1\2\=@"

所有都无法显示'textString'的寄存器内容,而是显示'@“'

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:3)

这是因为\=需要成为替换中的第一项。

您应该使用以下内容:

:'a,'bs/(atom1)(atom2)/\=submatch(1).submatch(2).@"