Je veux extraire de multiples occurrences de certains textes qui couvre plusieurs lignes et peut être adaptée à une seule réégalité VIM (utilisation de META caractère Exemple: strong> p> si j'exécute Comment yier / supprimer toutes les lignes assorties (en surbrillance)? P> P> \ _ code>).
Malheureusement, Althouth Les lignes correspondantes sont correctement soulignées dans Vim,
Lorsque j'ajoute une commande Vim (comme Supprimer ou Yank) après la correspondance REGEXP,
La commande ne fonctionne que sur la première ligne de chaque match. : g / bad_function ( [^;] \ + \ _ [^;] \ +; $ / d code>, alors seulement des lignes
1 et 7 sont supprimés bien que mis en surbrillance sont des lignes 1-4 et 7-9. P>
3 Réponses :
Comme déjà signalé dans mon commentaire; La question liée a la solution à votre problème: fonctionne pour moi. p> Si vous souhaitez correspondre à plusieurs termes sur différents lignes em> différents lignes, Vous pouvez essayer (en mode Command): P> "zyy (do this on empty line to empty the register 'z')
:%g/first.*\|second.*/yank z (grab matches in the 'z' register)
P (for pasting the contents of the last register)
Cela ne fonctionne toujours pas, seule la première ligne tirée. J'ai ajouté un exemple ci-dessus.
Mais s'il y a des lignes qui n'ont pas de motif spécifique entre la première et la deuxième ligne, comment pouvez-vous y avoir des chaussures?
@ Tombekeer: Je vois que vous avez modifié l'E.G. Publié dans votre question car ce n'était pas très clair avec la façon dont vous l'aviez formulée précédemment.
Afin d'accumuler des gammes de lignes correspondantes dans un registre, on peut utiliser le Commande suivante.
:let @a='' | g/^first/,/^second/y A
Si tel est le cas, pourquoi mon :% g / premier \ \ \ _. * Deuxièmement. * $ / '<<,'> Y code> travail?
@Chris Ça fonctionne parce que vous spécifiez explicitement la gamme de lignes à Yank (qui, à la manière, est égale à la plage de la correspondance uniquement avec coïncidence - voir mon commentaire à votre réponse).
Essayez ceci:
:let @a='' :g/first\_.*second.*$/normal! v/second^M$"Ay
Cela semble un peu compliqué, pourquoi pas seulement :% g / premier. * \ | Deuxième. * / Yank z code>?
parce que cela ne fera pas de lignes intermédiaires.
En effet; L'intention initiale de l'OP n'était pas très claire et je vois que la question est depuis modifiée pour être un peu plus claire.
Peut-être peut-être? Stackoverflow.com/Questtions/1474966/...