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