2009-04-10 8 views
3

Quelque chose ne va pas dans ": g-2-g/3 /" ou la récursion dans le global manque-t-elle? Je ne peux pas comprendre une raison de l'erreur:Comment puis-je utiliser récursivement le Global dans VIM?

E147: Cannot do :global recursive

Comment puis-je obtenir une recherche globale récursive dans VIM?

[Suggestion initiale de Neil avec l'opérateur \ | ]

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

Un inconvénient est que les combinaisons dilatent avec n nombres. Pour trois nombres, le nombre de combinaisons est de 3! (= 6) qui est

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

Pour les numéros de n, le nombre de combinaisons est n !.

[Solution avec l'opérateur \ &]

Brian Carper et Neil Butterworth compris la solution. Un grand merci pour eux!

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

Il est pour toute la ligne:

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

Quel est votre exemple supposé faire? –

+0

Neil Butterworth: J'ai choisi chaque ligne avec 2, puis j'ai essayé de choisir 3 sur chaque ligne des derniers résultats. –

+0

n'est-ce pas la même chose que chaque ligne qui contient 2 et 3? –

Répondre

3

information Nouveau: Cela fait ce que vous voulez - la séquence "\ &" est le "et" opérateur:

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

Brian Carper (voir les commentaires, et merci encore) explication:

/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

Comment le feriez-vous avec 3 numéros? g/1. * 2. * 3 \ | 2. * 1. * 3 \ | 3. * 1. * 2 \ | 1. * 3. * 2 \ | 2. * 3. * 1 \ | 3. * 2. * 1/Pouvez-vous voir que le nombre de combinaisons est n! pour n nombre? La recherche globale récursive aurait seulement n nombre de combinaisons pour n nombre. Pour n, c'est juste: g-1-g/2/g @ 3 @ ... g $ n $. Ce serait cool! –

+0

\ & est probablement ce que vous voulez, oui./1 \ & 2/ne fonctionnerait pas car les deux branches doivent correspondre "à la même position". /.*1\&.*2/ Laissez le match s'ancrer au début de la ligne et ensuite développer autant qu'il le faut pour trouver les numéros. –