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

在VIM中,如何删除所有行,直到满足正则表达式?,vim,Vim,我相信这个问题已经得到了回答,但是这个问题对于谷歌来说有点太复杂了 简而言之,我试图从一些代码中删除许多不推荐使用的方法。所以我浏览文件,当我看到一个我想删除的方法时,我会删除每一行,直到我看到一行以制表符开始,然后是字符串“def” 我认为VIM应该让我创建一个简单的宏来实现这一点,但诀窍就在眼前 这是我想删除的内容 def Method_to_Delete(self): """ @return Control ID : @author """ re

我相信这个问题已经得到了回答,但是这个问题对于谷歌来说有点太复杂了

简而言之,我试图从一些代码中删除许多不推荐使用的方法。所以我浏览文件,当我看到一个我想删除的方法时,我会删除每一行,直到我看到一行以制表符开始,然后是字符串“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搜索实际上是文本对象!这意味着您可以简单地:

d/\s*def

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

使用
:delete
ex命令并指定范围

:,/Keep/-1d
解释

  • 完整的命令应该是
    :,/Keep/-1delete
  • ,/Keep/-1
    是执行
    delete
    命令的范围
  • 表示当前行
  • b/c我们使用的是一个范围,从当前位置开始,可以假定并删除
  • /Keep/
    搜索与“Keep”匹配的行
  • /Keep/-1
    是搜索匹配的行,然后减去一行
  • :delete
    可短接到
    :d
有关更多帮助,请参阅

:h :range
:h :d

你赢了我,但我想你的意思是
d/\tdef
。酷!非常接近,但不是很接近。我想我有点不清楚。我想删除我所在的整行,因此我去掉了当前的“def”行,因此我将光标放在一个带有“def”的行上,我想删除该行以及到的每一行,但不包括以“\s\s\sdef”开头的下一行(我的选项卡总是展开),我将使用
/^def
搜索文件,然后使用
n
n
四处移动,最后使用
d/^def
删除。如果需要到达行的开头,请使用
0
如果def前面有空格,请在vim中搜索
/\v^\s*def
,请参阅
:help d
,注意,当模式用于
{motion}
时,它会跨越行。