正则表达式替换:如何在匹配的其余部分中间缩进可变数量的行

时间:2012-04-02 08:43:22

标签: python regex vim indentation

这是我对vim正则表达式的一个问题,但是python正则表达式也会有所帮助和欢迎。我们以这个python函数为例:

def func_hello (*args):
    for arg in args:
        print 'Hello, %s!' % arg

我想把它变成一个类中的方法(不是真的 - 只是在这个例子中),带有method_hello方法(我实际上并没有用这种方式命名)。我可以这样做:

:%s/def func_\(\w*\) (\(.*\)):\(\(\n\s\+.*\)\+\)/class \u\1 (object):\r\tmethod_\1 (self, \2):\r\t\3/g

然而,这给了我这个:

class Hello (object): 
    method_hello (self, arg1, arg2, arg3): 

    for arg in arg1, arg2, arg3: 
        print 'Hello, %s!' % arg 

我试图让这样的工作收集多行(它确实如此)

\(\(\n\s\+.*\)\+\)

...然后将它们全部缩进(它没有)

\r\t\3

...因为我不知道如何在匹配标签前面添加每一行。我似乎需要在正则表达式中使用正则表达式,以匹配可变数量的行,并在每个行前面加上制表符。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

不确定是否可以使用正则表达式执行此操作。但如果目标是在Vim中有快捷方式,那么这就是你想要的:

nmap <yourkey> vip>Oclass Hello(object):<esc>+f(aself, <esc>

或者沿着这些方向的东西。在大多数情况下我遇到过,在vim中,用其他热键来定义热键更容易。