5

現在、オプションを有効にして実行git diffすると--color、git は^M、追加された行にのみ、および末尾の空白などの行末を表示します。削除された行でも git にこれらを表示させることは可能ですか?

4

2 に答える 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 に答える