[英]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.