linux – ファイルを `less` や `more` で読み込むときに、どのようにして内容を色で取得できますか?

colors less linux

Linuxでファイルをlessmoreのコマンドで読むと、内容が色で表示されてしまうのですが、どうすればいいのでしょうか?

  453  Open the way  2010-03-09


ベストアンサー

2020年更新

より高速な方法は、less -R ref.https://superuser.com/a/117842/34893


より少ない量でピグメンチの力を活用できる – 自動で!手でパイプする必要はありません)

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";;

*)
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を解析したり。そのための他の回答をいくつか見てください

このアイデアは、makers of Pygmentsの古いブログ記事から来ていますが、元の記事はもう存在しません

170  Dario Seidl  2011-09-20


以下を試してみてください

less -R

man lessから

-rまたは--raw-control-charsの場合

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

-Rまたは--RAW-CONTROL-CHARSの場合

-r と同様ですが、ANSI “color” エスケープシーケンスのみが “raw” 形式で出力されます。(…)

529  ChristopheD  2010-03-09


別の投稿で答えが出ました。レスとgrep。grepからlessへのパイプを使用した場合に色付きの結果を得る

単に grep --color を実行すると、出力が端末かどうかを検出し、端末であれば色付けを有効にする grep --color=auto を暗示します。しかし、パイプを検出した場合は、色付けを無効にします。以下のコマンドを実行します

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

常に色付けを有効にし、自動検出を上書きし、あなたはより少ないで色のハイライトを取得します

警告。--color=alwaysをエイリアスにしないでください。これが --color=auto オプションがある理由です

147  Puneet  2011-04-27


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

実質的には色付きの less: / (およびそれ以上) で検索できるページャーです。唯一の欠点は、qで終了できないことですが、:qが必要です

また、vimと同じカラーリングになります(実際にvimを使っているので)

38  Riccardo Galli  2013-09-24


色を表示するために少ないことを伝えるには、それを-Rで呼び出します

less -R

残念ながらいくつかのプログラムは標準出力がターミナルではないことを検出して色を無効にします – 例えば pacman (Arch Linux package manager) など

このような場合には、unbufferを使用することが可能です

unbuffer <command> | less -R

パックマンを使った例

unbuffer pacman -Ss firefox | less -R

unbuffer コマンドは通常、expect (Arch Linux, Debian/Ubuntu) や expect-dev (Debian/Ubuntu のレガシーバージョン) のパッケージに含まれています

完全性を求めて質問に答えること

すでに他の人が回答しているように、pygmentizeはソースコードの色付けに最適です。unbufferは必要ありません。最も簡単な呼び出しです

pygmentize someSource.cpp | less -R

20  jbbr  2016-10-08


pygmentize-g オプションをサポートしており、拡張子の種類をチェックせずに STDIN から読み込んだファイルに便利な、使用されるレキサーを自動的に推測することができます

これを使えば、スクリプトを追加することなく、.bashrcに以下の2つのエクスポートを設定するだけで済みます

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

16  Tuxdude  2013-03-12


この色は何を意味するのか、例えばテキストファイルの色はどうあるべきか、と言ったことは言っていませんね

欲しいものがソースコードのシンタックスハイライトであれば、ソースコードハイライターが必要になります。私は、pygmentizeをこんな感じで使うことがあります

pygmentize file.cpp | less

or

pygmentize file.cpp | more

周りには他にもハイライトがあります

これはかなり速いです。vimを起動しても気にしないのであれば、vimにある場合に構文の強調表示ができる読み取り専用モードがあります

view file.cpp

または、churndさんの回答を参照してください

10  Benjamin Bannier  2010-03-09


これはまだpygmentsをベースにした回答で、いくつかの大きな改善点があります

  • lesspipelessfile のフィルタを壊しません
  • は、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文をevalに置き換えてください

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

Create ~/.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

7  Joe Coder  2017-05-29


GNU Source-highlightを使ってください; GNU Source-highlightがあればaptでインストールすることができます。それから、setting up with less の Source-highligh’ のドキュメントの助けを借りて、 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 を提供しました。Xavier はまた、あなたの端末が何色の色を扱えるかをチェックし、万が一の場合に 256 色を使うスクリプトも提供しています。このスクリプトは source-highlight-esc.sh と呼ばれ、他のバイナリと一緒にインストールされます

4  arsaKasra  2014-05-25


別の回答を展開するには、.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 と呼ばれています。最初は見つけるのに苦労しました。”pigments” の “pygments” としての “pigments” のスペルが明らかに間違っていたため、パッケージマネージャによって “python” がプレフィックスとして付けられている可能性があるパッケージであることを知るには十分なヒントになりませんでした

3  Speeddymon  2013-02-27


少ない経験値を向上させることについての私のブログ記事全文から凝縮。https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

カラフルなマンページの場合は、.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

3  xuhdev  2016-10-04


mostユーティリティはlessmoreの代替として色に優しいものです

2  Onlyjob  2013-08-22


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

それを使用するためのオプションのいくつかは、エイリアスを作成することです。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  2018-05-31


私にとって最も直感的でわかりやすい解決策は、以下の行を.bashrcに追加してpygmentizeを使うことでした

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

念のため、pygmentizeを呼べなかった場合には、pygmentizeのようにインストールすればいいだけです

pip install pygments

ps.pygmentize の実行バイナリは /usr/local/bin//home/username/.virtualenv/venvname/bin/ のどこかにあります

0  David Jung  2019-01-22


箱から出して色を使って動作する less/more に代わるものとして bat があります。ほとんどのパッケージマネージャにインストールできます

GitHub - sharkdp/bat: A cat(1) clone with wings.
A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.

0  Waylon Walker  2020-02-02


これらのどれも私のための箱の外で働いていたし、私はこれを作るための簡単な方法を考え出したので、私は共有するだろうと思った

ちょうどあなたがアクセスし、より大きな歴史をスクロールし、完全に色を保持することができますtmuxを使用しています

-2  math0ne  2018-01-25


出力テキストにカラーコントロール文字がある限り、less -RでOKです

-2  Leonardo Raele  2019-07-15


タイトルとURLをコピーしました