我得到了一些格式如下的代码:print 'hi' # sample comment
。
我曾经:%s/^\([^#]*\)\(#.*\)/\2\r \1/gc
在 vim 中更改它们的格式。
通过上面的命令,我得到了以下结果:
# sample comment
print 'hi'\s\s\s\s\s\s\s\s\s\s\s
\s
这几乎就是我想要的,除了我用来在结果中指示的不可见的额外空格。
看来\([^#]*\)
vim 命令的部分没有将空格包含在其范围内。
为什么会出现这种情况,如何解决?
答案1
发生这种情况是因为您的第一个捕获组做包括空格。
^\([^#]*\)\(#.*\)
| -------- -------- the comment
begin |
everything upto #
including spaces
要解决此问题,您需要将空格保留在捕获组之外,如下所示:
^\(.\{-}\)\s*\(#.*\)
| ------ -- ------ comment
begin | \____ any amount of whitespace
non-greedy match
这将使你的完整命令:
%s/^\(.\{-}\)\s*\(#.*\)/\2\r \1/gc