2009-04-10 9 views
3

":g-2-g/3 /"に何か間違っているか、グローバルでの再帰が欠落していますか?エラーの理由を理解できません。グローバルでVIMを再帰的に使用するにはどうすればよいですか?

E147: Cannot do :global recursive

VIMで再帰的なグローバル検索を行うにはどうすればよいですか?

[Neilの最初の提案は、演算子\ | ]

g/1.*2\|2.*1/ 

この組み合わせはn個の数字で展開されるという欠点があります。 3つの数字の場合、組み合わせの数は3です! (= 6)は

g/1.*2.*3\|2.*1.*3\|3.*1.*2\|1.*3.*2\|2.*3.*1\|3.*2.*1/ 

です。n個の場合、組み合わせの数はnです。

は[& \オペレータとソリューション]

ブライアンCarperとニールバターワースは解決策を考え出しました。彼らに大きな感謝!

g/.*1\&.*2\&.*3/ 

これは、行全体のためである:

g/.*1\&.*2\&.*3\&.*/ 
+1

あなたの例は何ですか? –

+0

ニールバターワース:私は2ですべての行を選択し、私は最後の結果のすべての行から3を選択しようとしました。 –

+0

は2と3を含むすべての行と同じではありませんか? –

答えて

3

新情報:これが何をしたいん - "& \" シーケンス "と" オペレータである:

g/.*1\&.*2\&.*3/ 

ブライアン・カーパーズ(コメント、感謝をもう一度参照)説明:

/1\&2/ wouldn't work because both branches need to match "at the same position". /.*1\&.*2/ let the match anchor itself at the front of the line and then expand however much it needs to to find the numbers

+0

あなたは3つの数字でどうやってやりますか? 1. * 2. * 3 \ | 2. * 1. * 3 \ | 3. * 1. * 2 \ | 1. * 3. * 2 \ | 2. * 3. * 1 \ | 3. * * 1 /組み合わせの数がnであることが分かりますか? nナンバー?再帰的なグローバル検索はn個の組み合わせに対してn個の組み合わせしか持たない。 nについては、g-1-g/2/g @ 3 ... g $ n $です。それはクールだろう! –

+0

\&おそらくあなたが望むものです、はい。/1 \&2 /は両方のブランチが "同じ位置に"一致する必要があるため動作しません。 /.*1\&.*2/マッチを行頭にアンカーさせてから、数字を見つけるために必要なだけ拡大します。 –