2

Vim のsubstitute-command の動作につまずいていて、実際には従うことができません。

シーケンスを含む次のコード行を考えると、 withと改行&&を置き換えたいと思います。&&&&

return a && b

私の最初の試みでは、単純にs/&& /&&^M/g(^Mを介して挿入されましたCtrl-V <Enter>) を使用しました。これにより、次のコードが生成されます。

return a && && 
b

2 番目の を挿入するために置換はどのくらい正確に実行され&&<space>ますか? 最初の (そして唯一の一致) は であり、この完全な一致は?&&<space>に置き換えられると予想していました。&&^M

問題は、正しい置換を実行する方法ではありません-\zsトークンを使用して試合の開始をリセットし、改行のみを挿入することになりました。正確に重複が導入された理由を理解したいだけです。

4

2 に答える 2

3

あなたがぶつかっている問題は、置換コマンドが置換&で特別なトークンとして扱われ、一致したテキストを意味することです。あなたはそれを逃れる必要があります。

:s/&& /\&\&^M/g
于 2012-07-18T08:25:07.603 に答える
1

この単純なコマンドは機能し、最初の行にエレガントでない末尾のスペースを残します。

:s/&& /&\r

しかし、私は末尾のスペースが好きではありません。

これは、末尾のスペースを残さずに、必要なことを実行します。

:s/&&\zs /\r

&&は「マーカー」として使用しますが、実際の一致であるa<space>はで区切ら\zsれ、キャリッジリターンに置き換えられます。

を参照してください:help \zs

編集

ほら、私はあなたの質問の最後の段落を完全に読むことができませんでした。

于 2012-07-18T08:49:42.507 に答える