12

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

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

4

2 回答 2

16

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

d/\s*def

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

于 2012-08-09T11:59:55.777 回答
14

使用:delete带范围的 ex-command

:,/Keep/-1d

解释

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

如需更多帮助,请参阅

:h :range
:h :d
于 2012-08-09T13:31:04.593 回答