2 votes

Vim supprime tous les paragraphes avec une regex correspondante

J'ai une série de paragraphes - une décharge de fil java - que je voudrais supprimer, mais UNIQUEMENT si les paragraphes contiennent le texte / Executor\.getTask / -- c'est-à-dire que les fils n'ont pas de tâche.

Comment puis-je faire cela dans vim ? J'ai actuellement une macro avec le contenu suivant /Executor\.getTask^Mvipd mais cela signifie que je dois appuyer sur @@ quelques milliers de fois - c'est un grand vidage de fil. J'espère qu'il y a un moyen d'utiliser global pour le faire.

Voici un exemple de paragraphe.

"xyz-1376" prio=10 tid=0x00002aedbc289000 nid=0x6cdf waiting on condition [0x00002aedd221f000]
java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x0000000434ca6d48> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1085)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

6voto

Craig McQueen Points 13194

Cela ressemble à un travail pour :global y :normal :

:g/Executor\.getTask/norm dap

2voto

Ben Points 2199

Vous avez une bonne réponse, en utilisant :global . Mais votre méthode originale pourrait également fonctionner. Plutôt que d'appuyer sur @@ quelques milliers de fois, il faut juste compter : 999999@@ . La répétition de la macro s'arrête automatiquement lorsqu'elle rencontre une erreur - dans ce cas, lorsqu'il n'y a plus de correspondance pour votre chaîne de recherche. Si vous ne voulez pas qu'elle revienne en boucle au début du fichier, vous pouvez :set nowrapscan d'abord, mais dans ce cas, cela ne semble pas nécessaire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X