这是我在 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
...因为我不知道如何在匹配中的每一行前面加上制表符。我的正则表达式中似乎需要一个正则表达式,以匹配可变数量的行并在每行前面加上制表符。
有办法吗?
请您参考如下方法:
不确定是否可以使用正则表达式来完成。但如果目标是在 Vim 中使用快捷方式,那么这就是您想要的:
nmap <yourkey> vip>Oclass Hello(object):<esc>+f(aself, <esc>
或者类似的东西。在我遇到的大多数情况下,在 vim 中根据其他热键定义热键更容易。
