vimの逆参照パッケージの内容にスペースが含まれていないのはなぜですか?

vimの逆参照パッケージの内容にスペースが含まれていないのはなぜですか?

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

おすすめ記事