次の形式のコードがあります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