2012-04-11 2 views
3

との表現をサブ置き換えるだから私はこの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"];/ 

私は何かを見つけることができませんでした。私は見ました:ヘルプサブ置換 - \ =と他のソースをオンラインにします。ありがとう!

答えて

3

あなたはほとんどそれを持っていました。

\=アトムの後のすべてが式である必要があります。したがって、文字列を連結してもう一度submatch()を使用する必要があります。あなたがすでに提供して正規表現を使用して:

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

正規表現(OPが提供)を除いて、あなたのコードが動作します。それ以外は等しく、 ':%s/\([A-z] \ + \)/'で始まり、彼のサンプル入力に基づいて望みの出力を得るべきです。アップアップされました! – bonsaiviking

+0

私はまだそれが動作すると思う、それはちょうどそこに余分なグループが必要ではありません。残念ながら私は現時点でそれをテストすることはできません。 –

+0

奇妙なことに、以前は私にとってはうまくいかなかったが、今はそうだ。混乱させて申し訳ありません。 – bonsaiviking

関連する問題