題 獲得更少或更多的顏色


當我使用命令在Linux中讀取文件時 less 要么 more,我怎樣才能獲得顏色內容?


356
2018-03-09 10:44


起源


這似乎有關: superuser.com/questions/36022/less-and-grep-color  - 有幫助嗎? - Jonik


答案:


你可以少用pygmentize的力量 - 自動! (無需手工管道。)

安裝 pygments 與您的包管理器或pip(可能稱為 python-pygments或者在這裡得到它 http://pygments.org/download/

寫一個文件 ~/.lessfilter

#!/bin/sh
case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

在你的 .bashrc 加

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

此外,你需要做 ~/.lessfilter 通過運行可執行

chmod u+x ~/.lessfilter

在Debian上測試過。

這個想法來自於一篇舊的博客文章 Pygments的製造者,但原來的帖子不再存在了。


133
2017-09-20 03:29



如果要對源代碼文件進行著色,還需要通過運行使〜/ .lessfilter可執行 chmod u+x ~/.lessfilter。你還需要pygmentize(pygments.org/download)安裝。 - Sergiy Byelozyorov
任何人都可以確認這是有效的,因為它在我執行命令時對我沒有任何影響 ls -l | less - puk
知道如何用Vladimir Linek的lessopen.sh鏈接這個嗎?它是用這種形式設置的:LESSOPEN =“lessopen.sh%s” - Gregory
@puk你可以做點什麼 ls --color=always -l | less -R。顯然要打字很多,但你可以把它變成類似的東西 ll。也就是說,如果您不想使用任何額外的庫。 - PhilT
將@ SergiyByelozyorov的評論添加到答案中。 - andrybak


請嘗試以下方法:

less -R

man less

-r 要么 --raw-control-chars

導致顯示“原始”控製字符。 (......)

-R 要么 --RAW-CONTROL-CHARS

喜歡 -r,但只有ANSI“顏色”轉義序列以“原始”形式輸出。 (......)


422
2018-03-09 10:48



當文件本身包含需要顯示的轉義碼時,這很有用。 - Nitrodist
我曾經知道更少-r但是在文件中搜索使用“/”不斷提出錯誤的行。 -R似乎做得更好。謝謝你的提示。 - Amos Shapira
應該指出的是,大多數程序都使用 isatty(2) 系統調用以檢查它們的標準輸出是否是終端,如果不是,則通常禁用彩色輸出。對於任何更少的管道, isatty 將返回0.要檢查這是否有效,請嘗試 echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
這個答案在實際做某事測試中並不出色。 - Michael Wolf
你也可以輸入 -R 當你已經打開 less 為達到這個。 - Scz


我在另一篇文章中得到了答案: Less和Grep:使用從grep到更少的管道時獲得彩色結果

當你簡單地跑 grep --color 它   暗示 grep --color=auto 哪一個   檢測輸出是否為a   終端,如果是這樣可以使顏色。   但是,當它檢測到管道時   禁用著色。下列   命令:

grep --color=always "search string" * | less -R

將始終啟用著色和   覆蓋自動檢測,和   你會得到突出的顏色   減。

警告:不要放 --color=always 作為別名,它有時會破壞事物。這就是為什麼有一個 --color=auto 選項。


118
2018-04-27 04:19



很好,謝謝。除了我需要使用 -R 作為一種選擇 less,以及。 - naught101
我相信 grep -R 用於指定遞歸搜索。 less -R 是必要的 less 正確吐出顏色。 grep --color=always [grep cmds] | less -R 適用於OS X 10.7.3! - Steven Lu
@naught101 @Steven Lu編輯,雖然看起來有些人可能不需要使用 less -R (根據原帖的作者,無論如何)。 - jtpereyda
反正讓grep知道管道少-R命令然後只是著色?所以,我們不必一直把--color = always和less -R。 - A-letubby
這是迄今為止最簡單的工作答案。謝謝! - Danny Staple


使用 view 代替 less。它打開文件 vim 在只讀模式。

它幾乎是彩色的 less:一個可以搜索的尋呼機 / (和更多)。唯一的缺點是你無法退出 q 但你需要 :q

此外,你得到的顏色相同 vim (因為你實際上正在使用 vim)。


29
2017-09-24 09:50



大文件的性能如何?對於巨大的文件,Vim語法突出顯示速度很慢。 - pihentagy
我不知道你對'大'的價值是什麼,但打開一個~10000行的文件是瞬間的,包括內部搜索。 - Riccardo Galli
我投了贊成票(我不知道 view)但另一個缺點是j / k / up / down不會立即滾動,因為有一個光標。 - Tyler Collier
請注意,您可能需要添加 view - 管道時 - user45909
vim 是一個編輯器,它將完整的文件加載到內存中,而 less 是一個尋呼機,只將文件部分加載到內存中。你會知道巨大文件的區別。 - sjas


pygmentize 支持 -g 自動猜測要使用的詞法分析器的選項,這對於從中讀取的文件很有用 STDIN 沒有檢查任何擴展類型。

使用它,您只需要在您的中設置以下2個導出 .bashrc 沒有任何額外的腳本:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'

12
2018-03-12 07:17



簡潔有效。我更喜歡定義一個別名,因為有時越少越好。所以:alias lesc ='LESS =“ - R”LESSOPEN =“| pygmentize -g%s”less' - Tiago


你沒有說這種顏色應該是什麼意思,例如文本文件的顏色應該是什麼?

如果你想要的是源代碼的語法高亮,你需要一個源代碼熒光筆。我有時會用 pygmentize 像這樣

pygmentize file.cpp | less

要么

pygmentize file.cpp | more

周圍還有其他熒光筆。

這很快。如果你不介意開火 vim 有一個只讀模式,如果你有它,可以給你語法高亮 vim

view file.cpp

或者看看churnd的答案。


9
2018-03-09 13:30





要告訴較少顯示顏色,請使用-R調用它:

less -R

不幸的是,有些程序檢測到他們的stdout不是終端並且禁用了顏色 - 例如pacman(Arch Linux包管理器)。

在那些情況下它可以使用 unbuffer

unbuffer <command> | less -R

使用pacman的例子

unbuffer pacman -Ss firefox | less -R

unbuffer 命令通常是其中的一部分 expect-dev (Debian / Ubuntu)或 expect(Arch Linux)包。

要回答完整性的問題:

正如其他人已經回答 pygmentize 非常適合著色源代碼。它不需要 unbuffer。最簡單的電話:

pygmentize someSource.cpp | less -R

8
2017-10-08 10:37