When I read a file in Linux with the command less or more, how can I get the content in colors?
- 179
- 8,613
15 Answers
Try the following:
less -R
from man less:
-ror--raw-control-charsCauses "raw" control characters to be displayed. (...)
-Ror--RAW-CONTROL-CHARSLike
-r, but only ANSI "color" escape sequences are output in "raw" form. (...)
- 74,068
- 6,342
-
it does not work
there is some conf file for "less" like for vim there is .vimrc ?
– Open the way Mar 09 '10 at 10:59 -
21This is useful when the file itself contains the escape codes that will need to be displayed. – Nitrodist Dec 16 '11 at 21:16
-
interesting, a test for
lessfile contains escape characters:scriptls --colorexitless -R typedscript– LiuYan 刘研 Mar 12 '13 at 08:02 -
1I used to know about less -r but searching in the file using "/" kept bringing up the wrong lines. -R seems to do a better job. Thanks for the tip. – Capt. Crunch Aug 06 '13 at 00:28
-
65It should be noted that most programs use the
isatty(2)syscall to check whether their standard output is a terminal, and usually disable colorized output if it is not. For any pipe to less,isattywill return 0. To check whether this works, tryecho -e '\x1b[32;1mtest\x1b[m' | less -r– mic_e Sep 24 '13 at 22:53 -
Using the lower case '-r' for me means that the ^M characters from windows files are not shown. I like this because I'm not bothered about line endings and it makes the rest of the output a bit clearer. – J.Churchill Sep 30 '13 at 08:48
-
13
-
-
23
-
3IMHO this should actually be the accepted answer, it is much more simple – Willian Mitsuda Apr 05 '17 at 07:14
-
As Nitrodist said this is useful only if tte escape codes for coloring are present. So if you want the git diff's output in less, you have to use git diff --color | less -R – Rohit Walavalkar Feb 19 '18 at 12:16
-
9This worked for me with grep only when I included the
--color=alwaysoption in grep.:grep --color=always foo myfile.txt | less -R– Dannid Jan 14 '19 at 17:31 -
-
Neither
-Rnor-rwork when outputting a object in NodeJS/Deno/Bun, e.g. :node -e "console.log({ 'foo': 'bar' })". Help ? Thanks – KaKi87 Feb 14 '24 at 15:56
If you just want to tell less to interpret color codes, use less -R. ref.
You can utilize the power of pygmentize with less - automatically! (No need to pipe by hand.)
Install pygments with your package manager or pip (possibly called python-pygments) or get it here http://pygments.org/download/.
Write a file ~/.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
In your .bashrc (or .zshrc or equivalent) add
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
Also, you need to make ~/.lessfilter executable by running
chmod u+x ~/.lessfilter
Edit: If you have lesspipe on your system, you might want to use that to automatically unzip archives when looking at them with less, e.g. less log.gz. lesspipe also supports a custom .lessfilter file, so everything said above works the same, you just have to run
eval "$(lesspipe)"
in your rc file instead of setting the LESSOPEN variable. Run echo "$(lesspipe)" to see what it does. Your .lessfilter will still work. See man lesspipe.
Tested on Debian.
You get the idea. This can of course be improved further, accepting more extensions, multiple files, or parsing the shebang for other interpreters than bash. See some of the other answers for that.
The idea came from an old blog post from the makers of Pygments, but the original post doesn't exist anymore.
Btw. you can also use this technique to show directory listings with less.
- 3,965
-
6If you want to have coloring of the source code files, you also need to make ~/.lessfilter executable by running
chmod u+x ~/.lessfilter. You also need to have pygmentize (http://pygments.org/download/) installed. – Sergiy Belozorov Dec 18 '12 at 11:07 -
Can anyone confirm that this works as it has no effect for me when I execute a command like
ls -l | less– puk Oct 30 '13 at 13:59 -
Any idea how to chain this with Vladimir Linek's lessopen.sh?? it is setup with this form: LESSOPEN="lessopen.sh %s" – Gregory Dec 23 '13 at 05:12
-
8@puk you can do something like
ls --color=always -l | less -R. Obviously a lot to type but you could alias it to something likell. That is if you don't want to use any extra libraries. – PhilT Jul 23 '14 at 16:17 -
The -g flag on pygmentize will solve the problem of "Error: no lexer for filename" for filetypes not included, as described here http://askubuntu.com/a/392017/115392 – Pan Chrono Sep 02 '14 at 12:37
-
2
-
Just in case anyone is interested, I wrote a pair of scripts that serves a very similar purpose (pygmentize-addons). They are wrappers around
pygmentize, used to view syntax highlighted code for files or scripts on PATH via stdout,less, or PNG image. I use it all the time to examine source code of files and installed scripts. – Six Jun 01 '15 at 12:59 -
-
is there an easy way to obtain more saturated colors on the default color scheme (php) to view in console? – arod Jul 10 '15 at 00:46
-
2My edit was rejected so I guess I'll post it as a comment instead: Don't test the exit codes of commands indirectly. You can use
if grep -q "#\!/bin/bash" "$1"(the-qsuppresses standard output). You may want to redirect standard error with2>/dev/null. – Tom Fenech Oct 23 '15 at 13:16 -
-
1It took me a long time to troubleshoot back to this, after noticing
lesscould no longer decompress .gz,bz2,xz,etc. files on the fly. How to have both color and prior LESSPIPE features? – Marcos Jan 14 '19 at 13:54 -
5To get a list of all unique file extensions supported by your currently installed pygmentize version, in a format suitable for pasting into this .lessfilter script, run
pygmentize -L | grep -o "(filenames .*)" | sed -E "s,\(filenames (.*)\),\1,gm;s/, /\n/g" | sort -u | tr "\n" "|". Note that on certain Linuxes, settingLESSOPENmay not be necessary because it is already setup to uselesspipewhich detects the .lessfilter file already (runecho $LESSOPENto check). – Bart May 17 '19 at 09:38 -
Make sure to add the
-Rbefore any files specified, or does not work after the file – Ferrybig Nov 15 '21 at 13:18 -
-
@alper Sure, this is a feature of
less, it works in any shell.lessjust executes whatever script you specify in theLESSOPENenvironment variable. – Dario Seidl Dec 08 '21 at 15:39 -
1@Marcos oh, right, I hadn't noticed that. It's actually very easy to support both, the lesspipe to handle archives and the .lessfilter to have colors (because lesspipe supports a custom lessfilter, see
man lesspipe). I'll update the answer again. – Dario Seidl Dec 08 '21 at 15:46 -
-
This is an excellent answer with a very useful example! Thanks! I think I'm going to try to make a lessfilter for jq and have it pretty print json chunk – BytePorter Sep 05 '22 at 12:02
I got the answer in another post: Less and Grep: Getting colored results when using a pipe from grep to less
When you simply run
grep --colorit impliesgrep --color=autowhich detects whether the output is a terminal and if so enables colors. However, when it detects a pipe it disables coloring. The following command:grep --color=always "search string" * | less -RWill always enable coloring and override the automatic detection, and you will get the color highlighting in less.
Warning: Don't put --color=always as an alias, it break things sometimes. That's why there is an --color=auto option.
-
6Nice, thanks. Except that I need to use
-Ras an option toless, as well. – naught101 May 08 '12 at 06:41 -
10I believe
grep -Ris for specifying recursive search.less -Ris necessary forlessto correctly spit the colors back out.grep --color=always [grep cmds] | less -Rworks for me on OS X 10.7.3! – Steven Lu May 09 '12 at 13:56 -
@naught101 @Steven Lu Edited in, though it seems that some people may not need to use
less -R(according to the author of the original post, anyway). – jtpereyda Oct 22 '13 at 17:17 -
2Is there anyway to let grep know just pipe less -R command and then just do coloring? So, we don't have to put --color=always and less -R all the time. – A-letubby Feb 27 '15 at 07:50
-
1
-
2This also works when you need to pipe
git difftoless. Doing just this:git diff | lesswon't show you any colors. You need to do this instead:git diff --colors=always | lessorgit diff --colors=always some_file | less. (I'm using cygwin on Windows 10, by the way.) – CSCH Aug 27 '18 at 20:17 -
1Correction/update of @CSCH comment: the correct option to
git diffis--color=always(no 's' to 'color'). – Giuseppe Jul 30 '20 at 11:36 -
Use view instead of less. It opens the file with vim in readonly mode.
It's practically a coloured less: a pager where you can search with / (and more). The only drawback is that you can't exit with q but you need :q
Also, you get the same colouring as vim (since you're in fact using vim).
- 3,649
- 593
-
How about the performance of big files? Vim syntax highlighting is know to be slow on huge files. – pihentagy Feb 20 '14 at 10:28
-
I don't know what's your value for 'big', but opening a ~10000 lines file is instantaneous, search inside included. – Riccardo Galli Feb 20 '14 at 11:50
-
13
-
11
vimis an editor, which loads the complete file into memory, whereaslessis a pager, loading the file only partially into memory. You will know the difference with huge files. – sjas Jul 20 '16 at 12:13 -
1@RiccardoGalli - Cool idea, but i would agree about the performance concern, it's not instantaneous. When viewing huge logs or greps, especially over-the-line (SSH),
lessis faster since it's not dumping the entire output line by line via "inserts" intovim. Also, you can search withlessusing '/'. Additionally it has a "tail" mode using shift-F which is handy. – dhaupin Sep 29 '16 at 17:49 -
1
gmic -h | viewstarts to executevimcommands. It is not safe.gmic -h | view -doesn't color on Ubuntu 18.10, so downvoting. – anatoly techtonik Sep 24 '18 at 11:39 -
at least on debian,
viewis a Debian Alternative, that is,/usr/bin/viewpoints to/etc/alternatives/view. Trysudo update-alternatives --config view. – myrdd Dec 03 '18 at 23:19 -
2
ls --color=always > /tmp/file && view /tmp/filecertainly does not work.... It shows the escape codes instead of rendering them. – Gert van den Berg Jul 05 '19 at 10:24
To tell less to show colors call it with -R:
less -R
Unfortunately some programs detect that their stdout is not a terminal and disable colors - e.g pacman (Arch Linux package manager).
In those cases its possible to use unbuffer:
unbuffer <command> | less -R
Example using pacman
unbuffer pacman -Ss firefox | less -R
The unbuffer command is usually part of the package expect (Arch Linux, Debian/Ubuntu) or expect-dev (legacy versions of Debian/Ubuntu).
To answer the question for completeness:
As others already answered, pygmentize is great for colorizing source code. It does not require unbuffer. Easiest call:
pygmentize someSource.cpp | less -R
- 471
-
4
-
3
-
I was trying to pipe dmesg output to check on boot errors but the colours didn't work unless I use unbuffer, which was confusing the heck out of me:
unbuffer dmesg | less -Rworks as expected. – pbhj May 12 '19 at 09:49 -
1on macOS
brew install expectgets you the necessaryunbuffercommand. – luckman212 Oct 19 '19 at 20:30 -
On macOS, the
brew install expectinstalled doesn't work, maybe because I havecondainstalled. There seems to be noexpectinstallable fromcondathat could fix this unfortunately. See: https://askubuntu.com/questions/1047900/unbuffer-stopped-working-months-ago – Cornelius Roemer May 10 '22 at 14:47
pygmentize supports the -g option to automatically guess the lexer to be used which is useful for files read from STDIN without checking any extension type.
Using that, you only need to set the following 2 exports in your .bashrc without any additional scripts:
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
- 709
-
4Concise and effective. I prefer defining an alias, because sometimes less is better. So: alias lesc='LESS="-R" LESSOPEN="|pygmentize -g %s" less' – Jade Amora Lua Apr 28 '14 at 18:27
You didn't say what this color should mean, e.g. what should the colors be for a text file?
If what you want is syntax highlighting for source code, you need a source code highlighter. I sometimes use pygmentize like this
pygmentize file.cpp | less
or
pygmentize file.cpp | more
There are other highlighters around.
This is pretty fast. If you don't mind firing up vim there is a read-only mode that can give you syntax highlighting if you have it in vim.
view file.cpp
or alternatively see churnd's answer.
- 16,213
This is yet another pygments-based answer, with several major improvements:
- does not break
lesspipeorlessfilefilters - works with multiple inputs to
less - correctly parses the script type from the shebang header
- works for all 434 file types lexable by Pygments
- color scheme is parameterized as an environment variable
EDIT: I maintain an updated/improved version of this script here: https://github.com/CoeJoder/lessfilter-pygmentize
Original version below:
Install Pygments and Gawk
sudo apt-get install python-pygments python3-pygments gawk
Set Environment Variables
Check whether lesspipe or lessfile is already enabled:
echo $LESSOPEN
If you don't see either program referenced there, ensure that lesspipe is installed (most distros come with it).
Add the following to ~/.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'
If you don't want lesspipe, replace the eval statement with:
export LESSOPEN='|~/.lessfilter %s'
Create ~/.lessfilter
Add the following code and make the file executable: 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
- 201
-
1TIL: If you get an error like "awk: line 1: syntax error at or near ," with the above .lessfilter in place, check that gawk is installed. – Bryce Oct 23 '19 at 23:38
Condensed from my full blog post about improving less experience: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/
For colorful manpages, add the following to your .bashrc or .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
For syntax highlighting, using an existing powerful lesspipe.sh to handle it instead of writing your own: https://github.com/wofr06/lesspipe
- 1,781
An alternative to less/more that works with colors out of the box is bat. You can install it with most package managers use it as a pager as well as a cat replacement.
- 159
-
-
bat behaves like cat when the content is small enough to fit inside your window; that is, writing to terminal without opening a pager. You can use the option
bat --paging=alwaysto always use a pager. – RexYuan Nov 04 '22 at 16:39
To expand upon another answer, you can make it work for most if not all of your scripts that don't have extensions by changing the .lessfilter file around just a bit:
#!/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
You'd still need to add the two variables to .bashrc:
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
And you'll still need to make .lessfilter executable:
$ chmod 700 ~/.lessfilter
Also I wanted to add that under debian the pygments package is called python-pygments. I had trouble locating it at first because the obvious misspelling of "pigments" as "pygments" wasn't enough of a hint to me that it was a package that might be prefixed with "python-" by the package manager.
- 242
-
22 comments: 1) Thanks for the improvement. 2) Phrases like "voted best answer" aren't great; that may change (in fact, if this is better than that answer, this post might become the top answer, at which point it'll just be confusing. Maybe just say "to expand upon another answer" or "captaincomic's answer"? – cpast Feb 27 '13 at 23:07
Use the GNU Source-highlight; you can install it with apt if you have it, or otherwise install it from source. Then set up an "input preprocessor" for less, with help from the Source-highligh' documentations for setting up with less:
This was suggested by Konstantine Serebriany. The script src-hilite-lesspipe.sh will be installed together with source-highlight. You can use the following environment variables:
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '
This way, when you use less to browse a file, if it is a source file handled by source-highlight, it will be automatically highlighted.
Xavier-Emmanuel Vincent recently provided an alternative version of ANSI color scheme, esc256.style: some terminals can handle 256 colors. Xavier also provided a script which checks how many colors your terminal can handle, and in case, uses the 256 variant. The script is called source-highlight-esc.sh and it will be installed together with the other binaries.
- 233
You can consider using most utility which is colour-friendly alternative for less and more.
- 434
-
can you show us one example? I tried here, and the output was black and white. – danilo Jun 13 '19 at 17:47
-
Your input should contain colours. First produce a colorised sample (e.g.
ccze -A </var/log/dpkg.log,ls -1 --color /var/log) then pipe it tomost:ls -1 --color /var/log | most. – Onlyjob Jun 15 '19 at 00:06 -
-
-
Make sure that your command produces colours before piping to
lessor others. Make sure your terminal emulator can output colours. CheckTERMenvironment variable. Read more in https://unix.stackexchange.com/questions/148/colorizing-your-terminal-and-shell-environment When possible use modern GNU+Linux distribution like Debian. Use search engine (e.g. https://duckduckgo.com/ https://www.startpage.com/) to find answers. Remember that comments are not for discussion. – Onlyjob Jun 16 '19 at 05:06
I found this simple elegant solution. You don't have to install anything extra as it is already there by default on most machines. As vim is installed by default on most machines, it includes a macro to run vim like less
Some of the options to use it are to create an alias:
alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'
or create a symbolic link:
ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless
Then you just run vless myfile.py
I got most of the information here
- 228
-
1I have
alias lesser='/usr/share/vim/vim80/macros/less.sh'in~/bash_aliases(in Ubuntu 18.04). Can use shortcuts such as f forward, b backward, d half down, u half up, q quit, etc... – Daniel Jun 05 '19 at 14:01
Another way to make less use more colors is to --use-color. For example, running
LESS='--use-color -RNJWj5 --header=2' man less
will, after trying a few commands (searching, scrolling, marking, etc.), result in
--use-color enables colored text
--header=2 -RNJWj3 enables extra features for demo purposes
- 131

less: colors are lost. (The answers to that ”piping issue“ involveless -R,unbufferetc.) But the actual question refers to opening a file! — The ambiguity lies primarily in the question's title, but even besides that, IMHO the question is still too broad: ”read a file“ could refer to any file (probably plain text). (well, ”get the content in colors“ is probably referring to syntax highlighting.) – myrdd Dec 03 '18 at 23:05less -Rwill work on files as well, e.g.ls --color=always > /tmp/file && less -R /tmp/file– Gert van den Berg Jul 05 '19 at 10:20lessormorewhen the file opened does NOT contain any escape codes“. But I only think he meant that, I don't know it. — By the way, I disagree with you interpretation of the question. The question says ”When I read a file […]“, and by ”file“ I'm quite sure the OP meant a typical plaintext file, or a ”normal“ file. Does a ”typical“ plaintext file (or ”normal“ file) contain escape characters, i.e., coloring? No. So IMHO the question is about ”adding“ colors (or syntax highlighting). – myrdd Jul 05 '19 at 14:30