2009-04-10 4 views
3

Stimmt etwas nicht in ": g-2-g/3 /" oder fehlt die Rekursion im globalen Bereich? Ich kann einen Grund für den Fehler nicht verstehen:Wie kann ich das Global in VIM rekursiv verwenden?

E147: Cannot do :global recursive

Wie kann ich eine rekursive globale Suche in VIM erhalten?

[Neils erster Vorschlag mit dem Operator \ |]

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

Ein Nachteil besteht darin, dass die Kombinationen mit n Zahlen erweitern. Für drei Zahlen ist die Anzahl der Kombinationen 3! (= 6) Das ist

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

Für n Zahlen ist die Anzahl der Kombinationen n !.

[Lösung mit dem Operator \ &]

Brian Carper und Neil Butter rechnete die Lösung aus. Vielen Dank für sie!

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

Es ist für die ganze Linie:

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

Was soll Ihr Beispiel tun? –

+0

Neil Butterworth: Ich wähle jede Zeile mit 2, dann habe ich versucht, aus jeder Zeile der letzten Ergebnisse 3 zu wählen. –

+0

ist das nicht dasselbe wie jede Zeile, die 2 und 3 enthält? –

Antwort

3

Neue Info: Das tut, was Sie wollen - die "\ &" -Sequenz ist der Operator "und":

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

Brian Carper (siehe Kommentare und nochmals Danke) Erklärung:

/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

Wie würdest du es mit 3 Zahlen machen? g/1. * 2. * 3 \ | 2. * 1. * 3 \ | 3. * 1. * 2 \ | 1. * 3. * 2 \ | 2. * 3. * 1 \ | 3. * 2. * 1/Kannst du sehen, dass die Anzahl der Kombinationen n ist! für n Nummer? Die rekursive globale Suche hätte nur eine Anzahl n Kombinationen. Für n ist es nur: g-1-g/2/g @ 3 @ ... g $ n $. Es wäre cool! –

+0

\ & ist wahrscheinlich was du willst, ja./1 \ & 2/würde nicht funktionieren, da beide Zweige "an der gleichen Position" übereinstimmen müssen. /.*1\&.*2/ lässt das Match sich selbst am Anfang der Zeile verankern und expandiert dann so viel, wie es benötigt wird, um die Zahlen zu finden. –