这是我对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
...因为我不知道如何在匹配标签前面添加每一行。我似乎需要在正则表达式中使用正则表达式,以匹配可变数量的行,并在每个行前面加上制表符。
有办法做到这一点吗?
答案 0 :(得分:0)
不确定是否可以使用正则表达式执行此操作。但如果目标是在Vim中有快捷方式,那么这就是你想要的:
nmap <yourkey> vip>Oclass Hello(object):<esc>+f(aself, <esc>
或者沿着这些方向的东西。在大多数情况下我遇到过,在vim中,用其他热键来定义热键更容易。