Windows上でVim 7.4を使用すると、Cファイルのコードから括弧の前後の不要なスペースを削除しようとしています。例:VimのRegexは、1回目のパスで2回目の一致を失い、2回目のパスが必要です
copyFunc (copyLength, sizeof (type));
次のパターンは、閉じ括弧の前にスペースを削除します。
:%s/\(\S\))/\1)/g
私は、上記のパターンは、すぐ上の行にtype
後の最初のスペースを削除したことを見つけるために驚いたが、行の末尾にある最後の2つの連続する閉じ括弧))
の間の次の行をスキップしました。
copyFunc (copyLength, sizeof (type));
^
Not removed on first pass
回避策の解決策はありません。むしろ、私はこの正規表現の動作の原因を理解することに興味があります。
最初に置き換える使用できない、 ')'最初まで消費します次のマッチで '\ S'とマッチします。 vimでそれらを実装している場合は、先読みを使用して括弧の有無をテストすることができます。または、スペースの前に文字をマッチさせることを控えることができます。これは、複数のスペースや行頭の動作を変更します。 – Aaron
@Aaron私は理解していると思います。最初の一致後、最後の閉じ括弧の前のスペースから照合プロセスが続きます。パターンは3文字で、行の最後の3文字はパターンを満たしません。私は正しいですか? – Sabuncu
はいこれが正しいです – Aaron