4

所以我正在寻找一种方法来采取这样的事情

Two words
Three Words Here

并用这个替换它

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

我发现了这个问题,这导致我使用 sub-replace 命令,然后我遇到了这样的事情。

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

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

我的问题是:有没有办法结束表达式,并向 :s 命令添加更多文本?像这样的东西。

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

我找不到任何东西。我查看了 :help sub-replace-\= 和其他在线资源。谢谢!

4

1 回答 1

6

你几乎拥有它。

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

:%s/\(\([A-z ]\)\+\)/\=substitute(submatch(1), ' ', '', 'g') . ' = myHash["' . submatch(1) . '"];'/
于 2012-04-11T20:38:01.353 回答