繁体   English   中英

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

[英]regex replace: how to indent a variable number of lines in the middle of the rest of the match

这是我在vim的正则表达式方面遇到的一个问题,但是python regex也将有所帮助并受到欢迎。 让我们以这个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

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

有没有办法做到这一点?

不确定您可以使用正则表达式来做到这一点。 但是,如果目标是在Vim中提供快捷方式,那么您需要这样做:

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

或类似的东西。 在大多数情况下,在Vim中,根据其他热键定义热键会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM