Vim 删除所有与正则表达式匹配的段落

Vim 删除所有与正则表达式匹配的段落

我有一系列段落(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先这样做,但在这种情况下它看起来不是必需的。

相关内容