在vim中编辑每三行文件

2024-06-26 01:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在为一个python项目制作vim中方法的模板列表。我在每个方法之间添加了行,并希望在每个方法中添加一个pass,在实现该方法之前,这仍然是可解释的python代码。在vim中,我知道如何使用:10,17s/<search regex>/<substitute>/编辑文件的空间上相邻的行,但是在完成了在方法之间添加空行的编辑之后,我需要每隔3行插入一个pass。我找到的方法是使用管道和&通过: :10s/<search regex>/<substitute>|13&|16&等等,我大概把15个符号连在一起让它工作。在vim中有没有更简洁的方法来获得这种行为?你知道吗

为了处理注释,这里有一个最小的例子,在文件中我的文件.py我有:

def _fun1(self):


def _fun2(self):


def _fun3(self):


def _fun4(self):

...etc

在第2行,第5行,第8行,等等,我想插入pass(在前面加上4个空格以保持一致的间距),/我把它加到了_fun15(self):,所以我想把14|lineNo&的行为链接在一起。可能是一个递增的特性,带有行号变量,或者是创建行为的其他代码。你知道吗


Tags: 文件项目方法代码self模板编辑列表
3条回答

有一种可能的方法:

:g/def _fun/normal! opass
  • 在每一行匹配def _fun
  • 打开下面的新行
  • 插入pass。你知道吗

如果要在每个存根之间有一行:

:g/def _fun/normal! opass^OJ^Ox
  • 在每一行匹配def _fun
  • 打开下面的新行
  • 插入pass
  • 为单个命令保留插入模式
  • 将下面的行与当前行连接起来
  • 为单个命令保留插入模式
  • 把那个讨厌的<Space>去掉。你知道吗

录制宏

qajopass<Esc>jq

现在通过运行@a(下次可以使用@@)来执行它。你知道吗


正如@midor所说,它可以与:g命令一起使用,形式如下:

:g/def _fun\d\+/norm @a

在所有匹配行上执行此宏。你知道吗

在我将使用的每个函数定义下面放置带缩进的“pass”:

:g/^def/put ='    pass'

^ ........... begining of each line
put ......... puts contents bellow

要压缩空行:

:g/^$/,/./-1j 

a global command the gets from each empty line ^$
until next non-empty line minus one, performs a join command

相关问题 更多 >