0
votes

Vim: plusieurs conditions pour différentes lignes

Y a-t-il un moyen d'agir sur une ligne lorsque des conditions serveur ne correspondent que. Pour exmaple, j'ai le texte comme xxx

(ps: ce texte est emprunté à une question similaire nother.) Si la ligne actuelle correspond à ^ Ceci et la ligne suivante correspond à rouge , puis effectuez la commande normale un texte à ajouter {ESC} .

Il existe un moyen simple d'y parvenir: xxx

Cependant, lorsque les conditions augmentent, les booms de regex. En outre, cette solution n'est pas aussi élégante que prévu. Y a-t-il de toute façon être accompli avec : gloabl la commande

Après quelques réponses données, j'ai trouvé ma question n'est pas assez claire, j'ai ajouté la commande pseudo suivante à montrer ce que je cherche. Le moyen élégant d'y parvenir est quelque chose comme (mais le code suivant ne fonctionnera pas): xxx

Le problème est, le premier : g Commande ne passera pas les lignes mais pas bloquer (je ne suis pas sûr si je suis correct), il est donc peu probable de filtrer la condition biaisée ( rouge , 1 ligne après).

S'il existe une solution, je peux facilement gérer les actions suivantes: Imprimez "la ligne et trois lignes suivantes" à condition que "la ligne contienne ceci et 100 lignes plus tard contient rouge ".

J'espère que je suis ' Je me suis fait clairement.

vim

3 commentaires

"Lorsque les conditions augmentent, les booms de regex" qui dépendent de quelles sont les conditions ... qu'est-ce que vous avez à l'esprit? Votre question serait meilleure si vous donnez un exemple où l'utilisation d'une regex aurait été vraiment impraticable


"Est-ce qu'il y a de toute façon être accompli avec: Global Command?" Oui. : G / ^ Ceci. * \ n. * rouge / normal! Le texte ASOME à ajouter ajoutera le texte sur les lignes correspondant au regex.


Merci à vous tous pour vos commentaires et j'ai ré-éditer le problème, veuillez vous reporter.


3 Réponses :


0
votes

J'utiliserais \ v ce qui signifie "une recherche très magique" afin que vous puissiez utiliser des groupes regex tels que ceci: xxx

alors votre regex correspond à chacun des ci-dessus les options que vous voulez. Il serait préférable de nous montrer la sortie souhaitée, afin que nous puissions mieux comprendre ce que vous voulez en conséquence.


1 commentaires

Merci d'avoir répondu, mais ce que vous voulez dire, ce n'est pas ce que je cherche à.



1
votes

Si je comprends bien, vous souhaitez ajouter du texte à la fin de chaque première ligne correspondante, mais pas avec la commande : STI .

: global avec : normal vous aidera à y parvenir: xxx

si vous voulez ajouter à la seconde Ligne, il suffit d'ajouter "j" comme ceci: xxx


1 commentaires

Merci d'aide et le problème est réédité pour une explication plus clarifiante, veuillez vous reporter à la déclaration renouvelée.



0
votes

Enfin, j'ai résolu ce problème en script. Et j'ai poussé le code à Github au cas où d'autres en ont besoin. Veuillez vous reporter à EnhancedG.VIM . Pour les exigences:

  1. Le courant contient [a-z] code>; li>
  2. 3 lignes après contient \ d code>; li>
  3. 2 lignes avant contenant exemple code>; li>
  4. Effectuer des du texte code> sur la ligne avant; sera une simple ex-commande: li> OL>
    :G/to delete/+!/^$/d
    


0 commentaires