【发布时间】:2011-11-09 14:57:55
【问题描述】:
我正在尝试在 vim 中使用反向引用和正则表达式进行搜索和替换操作。有趣的是,它只会在我进行纯搜索时识别模式,但如果我进行搜索并替换它会给我一个 E486: pattern not found 错误。
我有一堆形式的函数调用:
function( Nullable< double >(1.1), map[FOO] );
其中 FOO 是每一行的一些不同的变量名。我想把它变成
function( othermap[ FOO ], map[FOO] );
如果我尝试
:%s/Null.*\(map[\)\(.*\)\]/othermap[ \2 \], \1\2\]/g
它给了我“找不到模式错误”。甚至
:%s/Null.*\(map[\)\(.*\)\]//g
不会工作,因为它只是无法识别模式。但是,如果我使用完全相同的搜索正则表达式尝试以下命令:
/Null.*\(map[\)\(.*\)\]
它正确突出显示。之后,我可以做 %s//othermap[ \2 ], \1\2] 来代替我。所以我毕竟能够进行替换,但我一生都无法理解为什么这种模式在一种情况下会被识别,而在另一种情况下却不会。
【问题讨论】: