web-dev-qa-db-ja.com

多かれ少なかれ色を取得

Linuxでコマンドlessまたはmoreを使用してファイルを読み取るときに、内容をカラーで表示するにはどうすればよいですか。

402
Open the way

Pygmentizeの力をより少なく - 自動的に - 利用することができます。 (手で配管する必要はありません。)

あなたのパッケージマネージャかpip(おそらくpython-pygmentsと呼ばれる)で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";;

    *)
        if grep -q "#\!/bin/bash" "$1" 2> /dev/null; 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でテスト済み。

あなたはアイデアを得ます。もちろんこれはさらに改善することができ、より多くの拡張を受け入れたり、bash以外の他の通訳のためにShebangを解析したりします。他のいくつかの答えを見てください。

このアイデアは、 Pygmentsのメーカー からの古いブログ投稿から来たものですが、元の投稿はもう存在しません。

148
Dario Seidl

以下を試してください。

less -R

man lessから:

-rまたは--raw-control-chars

「生の」制御文字を表示させます。 (...)

-Rまたは--RAW-CONTROL-CHARS

-rと似ていますが、ANSIの "color"エスケープシーケンスだけが "raw"形式で出力されます。 (...)

485
ChristopheD

私は別の投稿で答えを得ました: Less and Grep:grepからlessへのパイプを使うと色付きの結果が得られます

単にgrep --colorを実行すると、出力が端末であるかどうかを検出し、そうであれば色を有効にするgrep --color=autoを意味します。ただし、パイプを検出すると色付けは無効になります。次のコマンド

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

常に色付けを有効にして自動検出を無効にすると、色の強調表示が少なくなります。

警告:--color=alwaysをエイリアスとして使わないでください。ときどき壊れることがあります。それが--color=autoオプションがある理由です。

134
Puneet

viewの代わりにlessを使用してください。読み取り専用モードでvimを使用してファイルを開きます。

それは実質的に色付きのless:あなたが検索できるページャです / (もっと)。唯一の欠点はあなたがで終了できないということです q しかし:qが必要です

また、vimと同じ色付けになります(実際にはvimを使用しているため)。

35
Riccardo Galli

pygmentizeは、使用される字句解析プログラムを自動的に推測する-gオプションをサポートします。これは、拡張子タイプをチェックせずにSTDINから読み取られるファイルに役立ちます。

これを使用すると、追加のスクリプトを使用せずに、次の2つのエクスポートを.bashrcに設定するだけで済みます。

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

色を表示するようにlessに指示するには、-Rを付けて呼び出します。

less -R

残念ながら、いくつかのプログラムはその標準出力が端末ではないことを検出し色を無効にします - 例えばpacman(Arch Linuxパッケージマネージャー)。

そのような場合、unbufferを使うことが可能です。

unbuffer <command> | less -R

Pacmanを使った例

unbuffer pacman -Ss firefox | less -R

unbufferコマンドは通常、パッケージexpect(Arch Linux、Debian/Ubuntu)またはexpect-dev(旧バージョンのDebian/Ubuntu)の一部です。

完全性のために質問に答えるために:

他の人がすでに答えたように、pygmentizeはソースコードを色付けするのに最適です。 unbufferは必要ありません。最も簡単な電話:

pygmentize someSource.cpp | less -R
14
jbbr

この色が何を意味するのか、あなたは言っていません。テキストファイルの色はどうなりますか?

あなたが欲しいのがソースコードのための構文強調表示であるならば、あなたはソースコード強調表示器を必要とします。私は時々 pygmentize をこんなふうに使っています

pygmentize file.cpp | less

または

pygmentize file.cpp | more

他にも蛍光ペンがあります。

これはかなり速いです。 vimを起動しても構わない場合は、読み取り専用モードを使用してください。vimで使用すると構文が強調表示されます。

view file.cpp

あるいは、教会の答えを見てください。

9

これはさらに別の pygments ベースの回答で、いくつかの大きな改善があります。

  • lesspipeまたはlessfileフィルターを壊さない
  • lessへの複数の入力を扱う
  • shebangヘッダーからスクリプトタイプを正しく解析します。
  • pygmentsが解釈可能な全434ファイルタイプで動作します。
  • 配色は環境変数としてパラメータ化されています

PygmentsとGawkをインストールする

Sudo apt-get install python-pygments python3-pygments gawk

環境変数を設定する

lesspipeまたはlessfileがすでに有効になっているかどうかを確認します。

echo $LESSOPEN

どちらのプログラムも参照されていない場合は、 lesspipe がインストールされていることを確認してください(ほとんどのディストリビューションに付属しています)。

~/.bashrcに以下を追加してください。

# sets LESSOPEN and LESSCLOSE variables
eval "$(Shell=/bin/sh lesspipe)"

# interpret color characters
export LESS='-R'

# to list available styles: `pygmentize -L styles`
export PYGMENTIZE_STYLE='paraiso-dark'

# optional
alias ls='ls --color=always'
alias grep='grep --color=always'

lesspipeが不要な場合は、evalステートメントを次のように置き換えます。

export LESSOPEN='|~/.lessfilter %s'

~/.lessfilterを作成する

次のコードを追加してファイルを実行可能にします。chmod u+x ~/.lessfilter

#!/bin/bash
for path in "$@"; do
    # match by known filenames
    filename=$(basename "$path")
    case "$filename" in
        .bashrc|bash.bashrc|.bash_aliases|.bash_environment|.bash_profile|\
        .bash_login|.bash_logout|.profile|.zshrc|.zprofile|.zshrc|.zlogin|\
        .zlogout|zshrc|zprofile|zshrc|zlogin|zlogout|.cshrc|.cshdirs|\
        csh.cshrc|csh.login|csh.logout|.tcshrc|.kshrc|ksh.kshrc)
            # Shell lexer
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE -l sh "$path"
            ;;
        .htaccess|Apache.conf|Apache2.conf|Dockerfile|Kconfig|external.in*|\
        standard-modules.in|nginx.conf|pacman.conf|squid.conf|termcap|\
        termcap.src|terminfo|terminfo.src|control|sources.list|CMakeLists.txt|\
        Makefile|makefile|Makefile.*|GNUmakefile|SConstruct|SConscript|\
        .Rhistory|.Rprofile|.Renviron|Rakefile|Gemfile|PKGBUILD|autohandler|\
        dhandler|autodelegate|.vimrc|.exrc|.gvimrc|vimrc|exrc|gvimrc|todo.txt)
            # filename recognized
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
            ;;
        *)
            ext=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
            case "$ext" in
                .as|.mxml|.bc|.g|.Gd|.gi|.gap|.nb|.cdf|.nbp|.ma|.mu|.at|.run|\
                .apl|.adl|.adls|.adlf|.adlx|.cadl|.odin|.c-objdump|.s|\
                .cpp-objdump|.c++-objdump|.cxx-objdump|.d-objdump|.S|.hsail|\
                .ll|.asm|.ASM|.objdump-intel|.objdump|.tasm|.au3|.ahk|.ahkl|\
                .bb|.decls|.bmx|.bas|.monkey|.BAS|.bst|.bib|.abap|.ABAP|.cbl|\
                .CBL|.cob|.COB|.cpy|.CPY|.gdc|.maql|.p|.cls|.c|.h|.idc|.cpp|\
                .hpp|.c++|.h++|.cc|.hh|.cxx|.hxx|.C|.H|.cp|.CPP|.ino|.clay|\
                .cu|.cuh|.ec|.eh|.mq4|.mq5|.mqh|.nc|.pike|.pmod|.swg|.i|.vala|\
                .vapi|.capnp|.chpl|.icl|.dcl|.cf|.docker|.ini|.cfg|.inf|\
                .pc|.properties|.reg|.tf|.pypylog|.cr|.csd|.orc|.sco|.css|\
                .less|.sass|.scss|.croc|.d|.di|.smali|.jsonld|.json|.yaml|\
                .yml|.dpatch|.darcspatch|.diff|.patch|.wdiff|.boo|.aspx|.asax|\
                .ascx|.ashx|.asmx|.axd|.cs|.fs|.fsi|.n|.vb|.als|.bro|.crmsh|\
                .pcmk|.msc|.pan|.proto|.pp|.rsl|.sbl|.thrift|.rpf|\
                .dylan-console|.dylan|.dyl|.intr|.lid|.hdp|.ecl|.e|.Elm|.ex|\
                .exs|.erl|.hrl|.es|.escript|.erl-sh|.aheui|.befunge|.bf|.b|\
                .camkes|.idl4|.cdl|.cw|.factor|.fan|.flx|.flxh|.frt|.f|.F|\
                .f03|.f90|.F03|.F90|.PRG|.prg|.go|.abnf|.bnf|.jsgf|.cyp|\
                .cypher|.asy|.vert|.frag|.geo|.plot|.plt|.ps|.eps|.pov|.inc|\
                .agda|.cry|.hs|.idr|.kk|.kki|.lagda|.lcry|.lhs|.lidr|.hx|\
                .hxsl|.hxml|.sv|.svh|.v|.vhdl|.vhd|.dtd|.haml|.html|.htm|\
                .xhtml|.xslt|.pug|.jade|.scaml|.xml|.xsl|.rss|.xsd|.wsdl|\
                .wsf|.xpl|.pro|.ipf|.nsi|.nsh|.spec|.i6t|.ni|.i7x|.t|.io|\
                .ijs|.coffee|.Dart|.eg|.js|.jsm|.juttle|.kal|.lasso|\
                .lasso[89]|.ls|.mask|.j|.ts|.tsx|.jl|.aj|.ceylon|.clj|\
                .cljs|.golo|.gs|.gsx|.gsp|.vark|.gst|.groovy|.gradle|.ik|\
                .Java|.kt|.pig|.scala|.xtend|.cpsa|.cl|.LISP|.el|.hy|.lsp|.nl|\
                .kif|.rkt|.rktd|.rktl|.scm|.ss|.shen|.xtm|.cmake|.mak|.mk|\
                .[1234567]|.man|.md|.css.in|.js.in|.xul.in|.rst|.rest|.tex|\
                .aux|.toc|.m|.sci|.sce|.tst|.ml|.mli|.mll|.mly|.opa|.sml|.sig|\
                .fun|.bug|.jag|.mo|.stan|.def|.mod|.mt|.ncl|.nim|.nimrod|.nit|\
                .nix|.cps|.x|.xi|.xm|.xmi|.mm|.Swift|.ooc|.psi|.psl|.G|.ebnf|\
                .rl|.treetop|.tt|.adb|.ads|.ada|.pas|.dpr|.pwn|.sp|.pl|.pm|\
                .nqp|.p6|.6pl|.p6l|.pl6|.6pm|.p6m|.pm6|.php|.php[345]|.zep|\
                .praat|.proc|.psc|.lgt|.logtalk|.prolog|.pyx|.pxd|.pxi|.dg|\
                .py3tb|.py|.pyw|.sc|.tac|.sage|.pytb|.qvto|.Rout|.Rd|.R|.rq|\
                .sparql|.ttl|.r|.r3|.reb|.red|.reds|.txt|.rnc|.graph|\
                .instances|.robot|.fy|.fancypack|.rb|.rbw|.rake|.gemspec|\
                .rbx|.duby|.rs|.rs.in|.SAS|.sas|.applescript|.chai|.ezt|\
                .mac|.hyb|.jcl|.lsl|.lua|.wlua|.moo|.moon|.rexx|.rex|.rx|\
                .arexx|.sh|.ksh|.bash|.ebuild|.eclass|.exheres-0|.exlib|.zsh|\
                .sh-session|.Shell-session|.bat|.cmd|.fish|.load|.ps1|.psm1|\
                .tcsh|.csh|.ns2|.st|.smv|.snobol|.rql|.sql|.sqlite3-console|\
                .do|.ado|.scd|.tcl|.rvt|.ng2|.tmpl|.spt|.cfc|.cfm|.cfml|\
                .evoque|.kid|.handlebars|.hbs|.phtml|.jsp|.liquid|.mao|.mhtml|\
                .mc|.mi|.myt|.rhtml|.tpl|.ssp|.tea|.twig|.vm|.fhtml|.sls|\
                .feature|.tap|.awk|.vim|.pot|.po|.weechatlog|.todotxt|.thy|\
                .lean|.rts|.u|.vcl|.bpl|.sil|.vpr|.cirru|.duel|.jbst|.qml|\
                .qbs|.slim|.xqy|.xquery|.xq|.xql|.xqm|.whiley|.x10)
                    # extension recognized
                    pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
                    ;;
                *)
                    # parse the Shebang script header if it exists
                    lexer=$(head -n 1 "$path" |grep "^#\!" |awk -F" " \
'match($1, /\/(\w*)$/, a) {if (a[1]!="env") {print a[1]} else {print $2}}')
                    case "$lexer" in
                        node|nodejs)
                            # workaround for lack of Node.js lexer alias
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l js "$path"
                            ;;
                        "")
                            exit 1
                            ;;
                        *)
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l $lexer "$path"
                            ;;
                    esac
                    ;;
            esac
            ;;
    esac
done
exit 0
5
Joe Coder

GNUソースハイライト を使用してください。持っていればaptと一緒にインストールすることも、そうでなければソースからインストールすることもできます。それから のSource-highlightのドキュメントを参考にしてless用の "input preprocessor"を設定してください/ less

これはKonstantine Serebrianyによって示唆されました。スクリプトsrc-hilite-lesspipe.shがsource-highlightと共にインストールされます。以下の環境変数を使用できます。

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

このように、あなたがファイルを閲覧するためにlessを使うとき、それがsource-highlightによって扱われるソースファイルであるならば、それは自動的にハイライトされます。

Xavier-Emmanuel Vincentは最近、ANSIカラースキームの代替バージョンesc256.styleを提供しました。一部の端末は256色を処理できます。 Xavierはまた、あなたの端末が何色を処理できるかをチェックするスクリプトを提供しました。このスクリプトはsource-highlight-esc.shという名前で、他のバイナリと一緒にインストールされます。

3
arsaKasra

別の答えを拡張するには、拡張子を持たないスクリプトのすべてではないにしてもほとんどの場合に、.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"
        ;;
    *)
        scriptExec=$(head -1 "$1" |grep "^#\!" |awk -F" " '{print $1}')
        scriptExecStatus=$?
        if [ "$scriptExecStatus" -eq "0" ]; then
            lexer=$(echo $scriptExec |awk -F/ '{print $NF}')
            pygmentize -f 256 -l $lexer "$1"
        else
            exit 1
        fi
esac

exit 0

それでも、2つの変数を.bashrcに追加する必要があります。

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

それでも、.lessfilterを実行可能にする必要があります。

$ chmod 700 ~/.lessfilter

また、私はdebianの下でpygmentsパッケージがpython-pygmentsと呼ばれることを付け加えたいと思いました。 「ピグメント」としての「ピグメント」の明白なスペルミスは、それがパッケージマネージャによって「python-」の接頭辞を付けられるかもしれないパッケージであることを私に示唆するのに十分でなかったので、私は最初それを見つけるのに苦労しました。

3
Speeddymon

mostlessの色にやさしい代替手段であるmoreユーティリティの使用を検討できます。

2
Onlyjob

私はこのシンプルでエレガントな解決策を見つけました。ほとんどのマシンではデフォルトで追加機能をインストールする必要はありません。 vimはほとんどのマシンにデフォルトでインストールされるので、vimのようにlessを実行するためのマクロが含まれています。

それを使用するためのオプションのいくつかはエイリアスを作成することです:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

またはシンボリックリンクを作成します。ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

それならvless myfile.pyを実行してください。

私はここでほとんどの情報 を入手しました

1
Wavesailor

経験不足を改善することについての私の完全なブログ投稿からの要約: https://www.topbug.ne​​t/blog/2016/09/27/make-gnu-lessより強力な/

カラフルなマンページの場合は、.bashrcまたは.zshrcに以下を追加してください。

export LESS_TERMCAP_mb=$'\E[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\E[1;36m'     # begin blink
export LESS_TERMCAP_me=$'\E[0m'        # reset bold/blink
export LESS_TERMCAP_so=$'\E[01;44;33m' # begin reverse video
export LESS_TERMCAP_se=$'\E[0m'        # reset reverse video
export LESS_TERMCAP_us=$'\E[1;32m'     # begin underline
export LESS_TERMCAP_ue=$'\E[0m'        # reset underline

構文を強調表示するには、独自のものを書くのではなく、既存の強力なlesspipe.shを使用して処理します。 https://github.com/wofr06/lesspipe

1
xuhdev

私にとって最も直感的で直接的な解決策はpygmentizeを使うことでした
.bashrcに以下の行を追加して

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

pygmentizeを呼び出せない場合は、次のようにインストールしてください。

pip install pygments

ps。 pygmentize実行可能バイナリは、/usr/local/bin/内、または/home/username/.virtualenv/venvname/bin/内などに配置されます。

0
David Jung