less
当我在 Linux 中使用命令或读取文件时more
,如何获取彩色的内容?
答案1
如果您只是想less
解释颜色代码,请使用less -R
。参考。
您可以自动利用 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";;
*)
if grep -q "#\!/bin/bash" "$1" 2> /dev/null; then
pygmentize -f 256 -l sh "$1"
else
exit 1
fi
esac
exit 0
在您的.bashrc
(或.zshrc
或同等)中添加
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
另外,你需要~/.lessfilter
通过运行
chmod u+x ~/.lessfilter
编辑:如果你lesspipe
的系统上有,你可能想要使用它在使用 less 查看档案时自动解压它们,例如less log.gz
。lesspipe 还支持自定义.lessfilter
文件,因此上面说的一切都是一样的,你只需要运行
eval "$(lesspipe)"
在您的 rc 文件中,而不是设置LESSOPEN
变量。运行echo "$(lesspipe)"
以查看它的作用。您的.lessfilter
代码仍将有效。请参阅man lesspipe
。
在 Debian 上测试。
您明白了。当然,这可以进一步改进,接受更多扩展、多个文件,或者为除 bash 之外的其他解释器解析 shebang。请参阅其他一些答案。
这个想法来自于一篇旧博客文章Pygments 制造商,但原帖子已不存在。
顺便说一句,你也可以使用这种技术来显示目录列表和less
。
答案2
请尝试以下操作:
less -R
从man less
:
-r
或者--raw-control-chars
导致显示“原始”控制字符。(...)
-R
或者--RAW-CONTROL-CHARS
类似
-r
,但只有 ANSI“颜色”转义序列以“原始”形式输出。(...)
答案3
我在另一篇文章中找到了答案:Less 和 Grep:使用从 grep 到 less 的管道获取彩色结果
当您简单地运行
grep --color
它时grep --color=auto
,它会检测输出是否是终端,如果是,则启用颜色。但是,当它检测到管道时,它会禁用着色。以下命令:grep --color=always "search string" * | less -R
将始终启用着色并覆盖自动检测,您将在更少的时间内获得颜色突出显示。
警告:不要将--color=always
其用作别名,否则有时会造成破坏。这就是为什么有一个--color=auto
选项。
答案4
要让 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