我有一系列段落(java 线程转储),我想删除它们,但仅当段落包含文本 // 时Executor\.getTask
——也就是说,线程没有任务。
我如何在 vim 中执行此操作?我目前有一个内容为 的宏/Executor\.getTask^Mvipd
,但这意味着我必须按@@
几千次 - 这是一个很大的线程转储。我希望有一种方法可以利用global
它。
这是一个示例段落。
"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)
答案1
:global
这听起来像是和 的工作:normal
:
:g/Executor\.getTask/norm dap
答案2
您有一个很好的答案,使用:global
。但是您的原始方法也可以工作。与其按@@
几千次,不如给它一个计数:999999@@
。当遇到错误时,宏将自动停止重复 - 在这种情况下,当您的搜索字符串不再匹配时。如果您不想让它循环回到文件的开头,那么您可以:set nowrapscan
先这样做,但在这种情况下它看起来不是必需的。