Может ли менее сохранить цветную продукцию?

310

Можно ли получить меньше, чтобы не монохромно выводить его?

Например, вывод из git diffцветного, но git diff | lessнет.

ripper234
источник
возможно, то же самое для суперпользователя: superuser.com/questions/117841/…
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
1
Связанный, но не идентичный вопрос. Ссылка lessтолько о .
Абель Чунг

Ответы:

361

Использование:

git diff --color=always | less -r

--color=alwaysнужно gitли выводить цветовые коды, даже если на выходе есть труба (не tty). И -rесть, что сказать, lessчтобы интерпретировать эти цветовые коды и другие escape-последовательности. Используйте только -Rдля цветовых кодов ANSI.

Стефан Хименес
источник
3
@ ripper234. С недавними мерзавцами git config color.ui trueдолжно хватить цветного вывода и автоматического запуска пейджера для длинных выходов.
Стефан Гименес
4
Параллельно с этим Q / A, watch --color 'git diff --cached --color=always'и его друзья могут принести вам дополнительную удивительность.
Алоис Махдал
27
Не less -Rлучше использовать (или export LESS=Rв /etc/profile)? Почему вы позволяете ему отображать что-либо кроме «цветных» escape-последовательностей 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

Другой вариант - включить цвета и использовать «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 .

Джеральд Сенаркленс де Гранси
источник
7
Используя Git 2.11, я обнаружил, что color.ui trueне работает с пейджером, но color.ui alwaysсделал. Возможно, это изменилось с момента публикации ответа.
Том
1
Эта опция (чтобы включить цвета и использовать 'less -r' в качестве вашего пейджера по умолчанию) с командой color.ui truedo work для таких команд, как 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) для less или также -R(только escape-последовательности ANSI).

У меня есть псевдоним для этого в ~/.bashrc

alias rless='less -r'
enzotib
источник
7
На самом деле я только что сделал alias less='less -r'. Любая причина не для?
ripper234
3
@ ripper234: Я смутно помню, что могут быть случаи, когда использование, -rкогда оно не нужно, может привести к проблеме визуализации.
энзотиб
1
Например, когда вы передадите ackс less -rвами потерять возврат каретки
Новая Александрия
6
Вы можете просто использовать, \lessесли визуализация не работает.
Брайан Петерсон
4
Ну, вам не нужно lessни к чему псевдониму , просто установите $LESSпеременную окружения для набора флагов, которые вы всегда хотите предоставить less, напримерexport LESS='-MRq -z-2 -j2’
wjv
14

Также treeесть возможность навязывать цвета:

tree -C | less -r

И так далее для ls:

ls -lR --color | less -r
Антонио Бардацци
источник
10

Просто добавьте еще одну версию в «use less -r»:

используйте переменную окружения LESS со значением r (или добавьте r к тому, что уже есть)

например, как я использую это в моем .bashrc

  export LESS=-Xr

(X останавливает очистку экрана при выходе меньше)

MortenSickel
источник
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
Naheel
источник