只有在print命令中包含字符串时,此post才有用。 现在我有很多源代码和一个声明,如
print milk,butter
应格式化为
print(milk,butter)
使用\ n捕获行的结尾并不成功。任何提示?
答案 0 :(得分:10)
您可以使用2to3并仅将修复程序应用于print语句 - >打印功能。
2to3 --fix=print [yourfiles]
这应该自动处理所有那些不能用于例如一个vim正则表达式。
如果由于某种原因缺少2to3
shell脚本,请将lib作为模块运行:
python -m lib2to3 --fix=print [yourfiles]
答案 1 :(得分:10)
我不熟悉2to3,但是从所有评论来看,它看起来都是正确的工具。
也就是说,也许我们可以用这个问题作为一些vim基础课程的借口。
首先,您需要一个与正确行匹配的模式。我认为^\s*print\>
会这样做:
^
匹配行首(和$
匹配行尾)。\s
匹配空格(空格或制表符)*
表示前一个原子的0或更多(尽可能多,或“贪婪”)。print
是一个文字字符串。\>
匹配词尾(零宽度)。您可以使用(文字)空格或\s\+
代替。接下来,您需要确定括在括号中的部分。由于*
是贪婪的,.*
将匹配行的结尾;没有必要把它固定在右边。使用\(\s*print\)
和\(.*\)
来捕获各个部分,以便您可以在替换中将其引用为\1
和\2
。
现在,将各个部分放在一起。有很多变种,我没有试过“高尔夫”这个:
:%s/^\(\s*print\)\s\+\(.*\)/\1(\2)
有些人更喜欢“非常神奇”的版本,其中只有a-z,A-Z,0-9和_被视为文字字符;那么你不需要转义括号和加号:
:%s/^\v(\s*print)\s+(.*)/\1(\2)