vim使用更多文本替换表达式

时间:2012-04-11 19:57:56

标签: vim

所以我正在寻找一种方法来取这样的东西

Two words
Three Words Here

并将其替换为

Twowords = myHash["Two words"];
ThreeWordsHere = myHash["Three Words Here"];

我发现了这个问题,这导致了我的子替换命令,我得到了类似的东西。

%s/\(\([A-z ]\)\+\)/\=substitute(submatch(1), ' ', '', 'g')/

现在这将得到没有空格的匹配,但在等号后面没有任何内容。在替换表达式后添加文本会导致“E51:无效表达式”错误。

我的问题是:有没有办法结束表达式,并在:s命令中添加更多文本?这样的事情。

%s/\(\([A-z ]\)\+\)/\=substitute(submatch(1), ' ', '', 'g') = myHash["\1"];/

我找不到任何东西。我看过:帮助子替换 - \ =和其他来源在线。谢谢!

1 个答案:

答案 0 :(得分:3)

你几乎拥有它。

\=原子之后的所有内容都必须是表达式,因此您需要将字符串连接在一起并再次使用submatch()。使用您已经提供的正则表达式:

:%s/\(\([A-z ]\)\+\)/\=substitute(submatch(1), ' ', '', 'g') . ' = myHash["' . submatch(1) . '"];'/