在vim中编辑文件的第3行

时间:2018-09-03 20:01:37

标签: python vim

我在vim中为Python项目制作了方法的模板清单。我在每个方法之间添加了行,并希望现在为每个方法添加pass,直到实现该方法为止,这仍然是可解释的python代码。在vim中,我知道如何使用:10,17s/<search regex>/<substitute>/编辑文件的空间连续行,但是在进行编辑以在方法之间添加空行之后,我需要在每第三行插入pass。我发现这样做的方法是通过以下方式使用管道和&:10s/<search regex>/<substitute>|13&|16&等。我可能将15个与号链接在一起以使其正常工作。有没有更简洁的方法来在Vim中获得这种行为?

为了发表评论,这里是一个最小的示例,我在文件myfile.py中拥有:

def _fun1(self):


def _fun2(self):


def _fun3(self):


def _fun4(self):

...etc

在第二行,第五行,第八行等上。我想插入pass(在保持一致间距之前w / 4个空格),/ i最多可以插入_fun15(self):因此希望将不带14个|lineNo&的行为链接在一起。也许带有行号变量的递增功能或其他创建行为的代码。

3 个答案:

答案 0 :(得分:3)

这是一种可能的方法:

:g/def _fun/normal! opass
  • 在与def _fun相匹配的每一行上……
  • 在下面打开新行…
  • 并插入pass

如果您希望每个存根之间只有一行:

:g/def _fun/normal! opass^OJ^Ox
  • 在与def _fun相匹配的每一行上……
  • 在下面打开新行…
  • 插入pass
  • 为单个命令保留插入模式...
  • 将下面的行与当前行连接起来……
  • 为单个命令保留插入模式...
  • 并删除讨厌的<Space>

答案 1 :(得分:2)

记录宏

qajopass<Esc>jq

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


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

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

要在所有匹配的行上执行此宏。

答案 2 :(得分:0)

要将缩进的“ 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