Isso parece um trabalho para :global
e :normal
:
:g/Executor\.getTask/norm dap
Eu tenho uma série de parágrafos - um dump de thread java - que eu gostaria de deletar, mas SOMENTE se os parágrafos contiverem o texto / Executor\.getTask
/ - ou seja, os threads não tiverem uma tarefa. / p>
Como posso fazer isso no vim? Atualmente, tenho uma macro com o conteúdo /Executor\.getTask^Mvipd
, mas isso significa que tenho que pressionar @@
algumas vezes - é um grande dump de thread. Espero que exista uma maneira de utilizar global
para fazer isso.
Aqui está um exemplo de parágrafo.
"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)
Você tem uma boa resposta, usando :global
. Mas o seu método original também pode funcionar. Em vez de pressionar @@
algumas vezes, apenas dê uma contagem: 999999@@
. A macro parará automaticamente de repetir quando encontrar um erro - nesse caso, quando não houver mais correspondências para sua string de pesquisa. Se você não quiser que ele volte ao início do arquivo, você pode :set nowrapscan
primeiro, mas neste caso não parece necessário.
Tags vim