vim 用更多文本替换表达式

4 vim

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

Two words
Three Words Here
Run Code Online (Sandbox Code Playgroud)

并用这个替换它

Twowords = myHash["Two words"];
ThreeWordsHere = myHash["Three Words Here"];
Run Code Online (Sandbox Code Playgroud)

我发现了这个问题,这让我想到了 sub-replace 命令,然后我想到了这样的事情。

%s/\(\([A-z ]\)\+\)/\=substitute(submatch(1), ' ', '', 'g')/
Run Code Online (Sandbox Code Playgroud)

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

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

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

我一直无法找到任何东西。我看过 :help sub-replace-\= 和其他在线资源。谢谢!

Ran*_*ris 6

你几乎拥有它。

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

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