在 VIM 中,如何删除所有行直到满足正则表达式?

问题描述 投票:0回答:3

我确信这个问题已经得到解答,但查询对于谷歌来说有点太复杂了。

简而言之,我正在尝试从某些代码中删除许多已弃用的方法。因此,我正在浏览文件,当我看到要删除的方法时,我会删除每一行,直到看到以制表符开头然后是字符串“def”的行。

我想 VIM 应该让我创建一个简单的宏来做到这一点,但我没有注意到这个技巧。

这是我要删除的那种东西。

def Method_to_Delete(self):
    """


    @return Control ID :
    @author
    """
    results = {}
    results['xx'] = "thingy"
    results['yy'] = 'thingy2'
    return results

def Method_to_Keep(self):
    """
     This is a method that does something wonderful!!!

    @return Control ID :
    @author
    """
    results = {}
    results['xxx'] = "WhooHoo!"
    results['yyy'] = 'yippee!!'
    return results

我想将光标放在“def Method_to_Delete”行上,并执行一些删除直到但不包括“def Method_to_Keep”的操作

一定有比多个“dd”命令更好的方法。

vim
3个回答
17
投票

Vim 搜索实际上是文本对象!这意味着您可以简单地:

d/\s*def

然后,只需根据需要使用

.
重复该命令即可。


16
投票

使用带有范围的

:delete
ex 命令

:,/Keep/-1d

说明

  • 完整的命令是
    :.,/Keep/-1delete
  • .,/Keep/-1
    delete
    命令起作用的范围
  • .
    表示当前行。
  • b/c 我们正在使用一个范围,从当前位置开始,可以假定并删除
    .
  • /Keep/
    搜索与“Keep”匹配的行
  • /Keep/-1
    是搜索匹配的行然后减去一行
  • :delete
    可以短接到
    :d

更多帮助请参阅

:h :range
:h :d

0
投票

如果需要正则表达式,只需输入:

:%s/\_.*\(def Method_to_Keep\)/\1/g
© www.soinside.com 2019 - 2024. All rights reserved.