色付きの出力を保持することはできませんか?


310

出力をモノクロにしないことはできますか?

たとえば、からの出力git diffは色付けされていますが、色付けされてgit diff | lessいません。



1
関連するが同一ではない問題。リンクは約lessのみです。
アベルチャン

回答:


361

つかいます:

git diff --color=always | less -r

--color=alwaysgit出力がパイプ(ttyではない)であっても、カラーコードを出力するように指示するためにあります。そして、それらのカラーコードと他のエスケープシーケンスを解釈-rするように伝えるlessためにあります。-RANSIカラーコードのみに使用します。


3
@ ripper234。最近GITSで、git config color.ui true色付きの出力を得るのに十分であるべき、自動的に長い出力のページャを実行します。
ステファンギメネス

4
このQ / Aと並行してwatch --color 'git diff --cached --color=always'、その友人はあなたにいくつかの追加の素晴らしさをもたらすことができます。
アロイスマーダル

27
less -Rより良い(またはexport LESS=R/etc/profile)使用していませんか?ANSI「カラー」エスケープシーケンス以外の表示を許可するのはなぜですか?また、manページは述べていますWarning: when the -r option is used, less cannot keep track of the actual appearance of the screen (since this depends on how the screen responds to each type of control character). Thus, various display problems may result, such as long lines being split in the wrong place.
X-ゆり

5
-rオプションを指定し忘れた場合は、lessプロンプトで「-r」と入力するだけです。これは、もちろん、ほとんどのオプションまたはほとんどすべてのオプションで機能します(つまり、-iignorecaseをオンにします)。
haridsv

3
grep --color=always同じように機能します。これはこの質問または回答の一部ではありませんが、私はその質問についてグーグルで検索してここに来ました。
フランクブライス

57

別のオプションは、色を有効にし、ページャーとして「less -r」を使用することです。

git config --global color.ui true
git config --global core.pager 'less -r'

これにより

[color]
    ui = true
[core]
    pager = less -r

〜/ .gitconfigで

詳細については、Pro Git bookを参照してください。


7
Git 2.11を使用するcolor.ui trueと、ページャーでは機能しませんでしたが、機能color.ui alwaysしました。これは、回答が投稿されてから変更された可能性があります。
トムザイチ

1
このオプション(色を有効にすると、デフォルトでは、あなたのページャとして「少ない-r」を使用する)とは、color.ui true同じようcomandsのために働くんgit -p diffgit -p status(ここで、-pすべての出力は、それはだ、デフォルトでは、$ PAGERにパイプを意味しless、たとえば(偶数のgitのではなく、古いバージョンの) 、Git 1.7.1)。ただしcolor.ui alwaysgit status | less -rまたはを直接指定すると、色付きの出力を取得する必要があります(出力が(ttyではなく)パイプであってもgitにカラーコードを出力するように指示します)git diff | less -r。出力リダイレクトを明示的に指定すると、ページャーから終了した後の出力は表示されません。
健一

29

less(またはANSIエスケープシーケンスのみ)には-r--raw-control-chars)オプションを使用します-R

私はこれのエイリアスを持っています ~/.bashrc

alias rless='less -r'

7
実際に私はちょうどやったalias less='less -r'。しない理由は?
ripper234

3
@ ripper234:-r不必要に使用すると視覚化の問題につながる可能性があることを漠然と覚えています。
-enzotib

1
たとえば、パイプackless -rすると、キャリッジリターンを失います
ニューアレクサンドリア

6
\less視覚化が失敗した場合にのみ使用できます。
ブライアンピーターソン

4
ええと、less何にもエイリアスする必要はありません。$LESS環境変数を、常に提供したいフラグのセットに設定するだけですless。たとえばexport LESS='-MRq -z-2 -j2’
wjv


10

「use less -r」に別のバージョンを追加するだけです:

環境変数LESSを値rで使用します(または、既にあるものにrを追加します)

たとえば、.bashrcで使用する場合

  export LESS=-Xr

(Xは、より少ない終了時に画面のクリアを停止します)


1
残念ながら-Xは私にとってもマウスのスクロールを壊します:c
Xerus


3

私はこれが古く、多くがすでに正しい答えを提供していることを知っていますが、文字を表示する際に問題が発生する可能性があるため、ANSIカラーのみが必要な場合ではなくless -R、常に使用less -rすることをお勧めします-r

マニュアルから:

   -r or --raw-control-chars
          Causes "raw" control characters to be displayed.   The  default
          is  to display control characters using the caret notation; for
          example, a control-A (octal 001) is displayed as  "^A".   Warn‐
          ing:  when the -r option is used, less cannot keep track of the
          actual appearance of the screen (since this depends on how  the
          screen responds to each type of control character).  Thus, var‐
          ious display problems may result,  such  as  long  lines  being
          split in the wrong place.

   -R or --RAW-CONTROL-CHARS
          Like  -r,  but only ANSI "color" escape sequences are output in
          "raw" form.  Unlike -r, the  screen  appearance  is  maintained
          correctly  in  most  cases.   ANSI "color" escape sequences are
          sequences of the form:

               ESC [ ... m
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.