Чи можна менше зберегти кольоровий вихід?


310

Чи можу я отримати менше, щоб не монохромно виходити?

Наприклад, вихідний сигнал git diffкольоровий, але git diff | lessце не так.



1
Споріднене, але не тотожне питання. Посилання lessлише про .
Abel Cheung

Відповіді:


359

Використання:

git diff --color=always | less -r

--color=alwaysє, щоб сказати, gitщоб вивести кольорові коди, навіть якщо на виході є труба (не tty). І -rчи варто сказати, lessщоб інтерпретувати ці кольорові коди та інші послідовності втечі. Використовуйте лише -Rдля ANSI кольорових кодів.


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 "кольорових" послідовностей втечі? Також на сторінці чоловіка написано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-yuri

5
І якщо ви забули вказати -rваріант, ви можете просто ввести "-r" у відповідь less. Це, звичайно, працює з більшістю або меншими можливостями (наприклад, -iувімкнути ігнор).
haridsv

3
grep --color=alwaysпрацює так само. Це не є частиною цього питання чи відповіді, але я потрапив сюди з гуглити з цього питання, так що воно є.
Френк Брайс

57

Іншим варіантом буде включення кольорів та використання "менше -r" в якості пейджера.

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

Це призводить до

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

у вашому ~ / .gitconfig

Для отримання додаткової інформації дивіться книгу Pro Git .


7
Використовуючи Git 2.11, я виявив, що color.ui trueне працює з пейджером, але так color.ui alwaysі є. Це може змінитися з моменту опублікування відповіді.
Том Зіч

1
Цей параметр (щоб увімкнути кольори та використовувати "менше -r" в якості пейджера за замовчуванням), color.ui trueвиконайте роботу для команд типу ( git -p diffі, git -p statusде -pозначає, що весь вихід у $ PAGER, за замовчуванням це less) навіть для досить старих версій git (наприклад, , Git 1.7.1). Але вам все одно потрібно color.ui always(що вказує git виводити кольорові коди "навіть якщо виведенням є труба (не tty)"), щоб отримати кольоровий вихід, коли ви безпосередньо вказуєте git status | less -rабо git diff | less -r. Якщо ви чітко вказали переадресацію виводу, ви не побачите вихід після виходу з пейджера.
кенічі

29

Використовуйте -r( --raw-control-chars) варіант для меншої або також -R(лише послідовності втечі ANSI).

У мене є псевдонім для цього в ~/.bashrc

alias rless='less -r'

7
Насправді я просто так зробив alias less='less -r'. Будь-яка причина не робити?
ripper234

3
@ ripper234: Я смутно пам'ятаю, що можуть бути випадки, коли використання, -rколи не потрібно, може призвести до проблеми візуалізації.
enzotib

1
Наприклад, коли ви спілкуєтесь ackз less -rвами, ви втрачаєте повернення вагона
Нова Олександрія,

6
Ви можете просто використовувати, \lessякщо візуалізація зіпсується.
Брайан Петерсон

4
Ну, вам не потрібно псевдонімувати lessні до чого, просто встановіть $LESSзмінну оточення на набір прапорів, які ви завжди хочете надати less, наприкладexport LESS='-MRq -z-2 -j2’
wjv


10

Просто для додання іншої версії на "використання менше -r":

використовувати змінну середовища LESS зі значенням r (або додати r до того, що вже є)

наприклад, як я використовую його у своєму .bashrc

  export LESS=-Xr

(X зупиняє очищення екрана при меншому виході)


1
на жаль -X також порушує прокручування миші для мене: c
Xerus


3

Я знаю, що це старе, і багато хто вже дав правильну відповідь, але я хотів би додати, що це завжди краще використовувати, less -Rа не, less -rякщо вам потрібні лише кольори ANSI, оскільки це -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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.