現在、オプションを有効にして実行git diff
すると--color
、git は^M
、追加された行にのみ、および末尾の空白などの行末を表示します。削除された行でも git にこれらを表示させることは可能ですか?
1988 次
2 に答える
1
これは最善の回避策ではありませんが、シェル エイリアスを作成して耐えられるようにすることができます。残念ながら、出力にタブとスペースを混在させると、ターミナルで正しくレンダリングされません。これは Gnome ターミナルの問題のようです (diff に追加された行でも同じ動作が見られます)。
必要なコマンドは次のとおりです。
git diff --color | \
sed 's/^\(\x1B\[31m-.*[^ \t]\)\([ \t]\+\)\(\x1B\[m\)$/\1\x1B[41m\2\3/g'
またはもっと便利に、これをあなたのに追加してください.bashrc
:
alias coloreol="sed 's/^\(\x1B\[31m-.*[^ \t]\)\([ \t]\+\)\(\x1B\[m\)$/\1\x1B[41m\2\3/g'"
そうすればgit diff --color|coloreol
、シェルプロンプトで入力できます。
基本的に、これは ANSI 赤のカラー コードに一致し、マイナス記号の後に空白以外の文字が続きます。その後、ANSI リセット フラグが検出されるまで、1 つまたは複数の空白文字と一致します。Sed は、空白と行末の間に ANSI red-invert コードを挿入します。
必要に応じて変更できるように、正規表現を分解しました。
最初の部分は、次の 3 つのグループに分けられます。
Match the start of the line and ANSI code for red:
^\(\x1B\[31m
-.*[^ \t] <-- Followed by the hyphen, anything, then a non-whitespace character
\)
Now match one or more space or tab characters for group 2.
\([ \t]\+\)
Finally the ANSI reset code and EOL for group 3
\(\x1B\[m\)$
次に、次のように置き換えます。
\1 \x1B[41m \2 \3
つまり、最初の一致、逆赤の ANSI コード ( \x1B[41m
)、その後に空白と ANSI リセットが続きます。
于 2014-07-31T07:51:12.337 に答える