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

时间:2012-08-09 11:56:46

标签: vim

我确信这已经得到了解答,但对于Google来说查询有点过于复杂。

简而言之,我试图从某些代码中删除许多已弃用的方法。所以我正在浏览文件,当我看到一个我要删除的方法时,我将删除每一行,直到我看到一行以制表符开头,然后是字符串“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”命令更好的方法。

2 个答案:

答案 0 :(得分:14)

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

d/\s*def

然后,只需根据需要使用.重复该命令。

答案 1 :(得分:11)

使用范围

:delete ex-command
:,/Keep/-1d

解释

  • 完整命令为:.,/Keep/-1delete
  • .,/Keep/-1delete命令将采取行动的范围
  • .表示当前行。
  • b / c我们正在使用一个范围,从当前位置开始,.可以被假设和删除
  • /Keep/搜索与“Keep”相匹配的行
  • /Keep/-1搜索匹配的行,然后减去一行
  • :delete可以缩短为:d

如需更多帮助,请参阅

:h :range
:h :d