语法高亮/着色猫


202

有没有上色的输出的方法cat,该方法grep一样。

对于grep,在大多数控制台中,它显示彩色输出,突出显示搜索到的关键字。否则,可以通过调用“ grep --color 是否有一种通用方法来根据您的个人选择为任何程序的输出着色” 来强制执行此操作。

据我了解,程序本身不负责颜色。它是外壳。

我在FreeBSD 5.2.1中使用了默认的shell,它看起来从时代开始就从未见过颜色。


我不明白您要说什么
鲁路修·兰彭

不好了。我不想显示二进制文件。我只想以彩色方式显示二进制输出。
鲁路修(L​​elouch Lamperouge)

6
嗯-FTFY (您可以随时编辑自己的问题)
sehe 2011年

我编辑,以避免关于“二进制”一词的困惑
沃尔克·西格尔

3
我认为@buergi的答案与问题相符,并且其支持的投票数也支持了这一点。考虑更改接受的答案。
Ioannis Filippidis 2014年

Answers:


22

cat语法高亮根本超出范围。cat不是为了那个。如果只想以某种方式对某个文件的全部内容进行着色(整个文件具有相同的颜色),则可以使用终端转义序列来控制颜色。

这是一个示例脚本,该脚本将根据文件类型选择颜色(您可以使用类似的方法而不是cat直接调用):

#!/bin/bash
fileType="$(file "$1" | grep -o 'text')"
if [ "$fileType" == 'text' ]; then
    echo -en "\033[1m"
else
    echo -en "\033[31m"
fi
cat $1
echo -en "\033[0m"

上面的代码(在支持这些转义序列的终端上)会将任何文本文件打印为“粗体”,并将任何二进制文件打印为红色。您可以使用strings而不是cat打印二进制文件,并且可以增强逻辑以使其适合您的需求。


我在想这样的事情。但是我需要可以普遍做到的事情。不只是cat/ grep/any particular program
鲁路修(L​​elouch Lamperouge)

然后,您可以简单地将要执行的命令作为参数传递给脚本,并cat用一些硬编码调用替换该脚本,$cmd如果有两个参数,则初始化为$ 1;如果只有一个,则默认为默认值。然后,您只需编写:colorful.sh grep file
Costi Ciudatu

8
“猫不是那个意思。” Cat也不是为了将单个文件写入stdout而是为了级联。但这仍然并不意味着将单个文件写入stdout并没有用。并不是说突出显示它们是没有用的。
mikemaccana '17

我试过,在cygwin下pygmentize是不能上色的。有小费吗?
trueadjustr

407

我建议pygmentize从python包开始python-pygments。您可能需要定义以下方便的别名(除非您ccat从ccrypt包中使用)。

alias ccat='pygmentize -g'

使用pygmentize突出显示语法的cat输出

如果要行号:

alias ccat='pygmentize -g -O style=colorful,linenos=1'

22
另一个解决方案是使用linux highlight命令。alias ccat='highlight -O ansi'
Evan Purkhiser

99
这应该是恕我直言的公认答案。除此之外,我将其别名为alias dog='pygmentize -g',因为狗比猫还凉!
polym

8
您可以添加更少的-R来使代码可滚动:#!/bin/bash \n pygmentize -g $1 | less -R
Fabricio PH

6
我叫我的别名nyancat
zneak 2015年

2
pygmentize可以按预期工作,但不幸的是,它似乎很慢。:-/
Frerich Raabe

113

选项:

pygmentize很好。我有一个别名:

alias c='pygmentize -g'

重点是另一种广泛使用的替代方法是

alias cats='highlight -O ansi --force'

安装:

您可能必须pygments使用以下命令进行安装:

sudo pip install pygments
sudo easy_install Pygments #for Mac user

以及highlight适用于所有发行版本的软件包

sudo apt-get install highlight
sudo yum install highlight

在行动中:

我在下方附上两张照片,以便对重点进行比较

这里正在pygmentize起作用: Pygmentize突出显示python文件

这是highlight在python文件上突出显示突出显示


4
highlight非常适合我的需求,并且安装简单,谢谢。如果你想看看文件,而不扩展(例如.bash_aliases),然后添加--syntax=bash除了-O ansi迫使它。
jerclarke '16

1
#画中画安装Pygments来做#回声“的别名CATC = 'pygmentize -g'” >> “〜/ .bashrc中” #接近终端#打开终端#CATC test.js ---和完美的作品:-)😊
BG布鲁诺

3
highlight比该python程序快34倍。古典语言的力量很强大。
Avindra Goolcharan

2
对于highlight,您想添加--force到别名,否则,它将为它不理解的文件格式抛出错误,而作为cat替换,您希望它仍显示输出而不突出显示,这是正确的--force。一起:alias cat="highlight -O ansi --force"
Alexander Klimetschek

1
@Luke这就是为什么您应该添加-O ansi默认值以输出html的原因:-)
Thomas

59

从2018年4月下旬开始:

蝙蝠 -具有语法高亮和Git集成的cat(1)克隆。

该项目是猫克隆,支持用Rust编写的颜色和自定义。它不仅提供具有多个主题的语法高亮显示,还提供Git集成。如文档中所述:

蝙蝠试图实现以下目标

  • 提供精美的高级语法突出显示
  • 与Git集成以显示文件修改
  • 替代(POSIX)cat
  • 提供用户友好的命令行界面

不用说,它比pygmentize快得多,并且在遇到大文件时不会阻塞。

可以在Github存储库中找到源代码和二进制发行版 + 安装说明,以及与替代程序比较


5
人们忘记提及的是bat默认情况下处于交互模式。为了使其表现得更像cat,请将其与-pp参数一起使用。别名之类alias cat="bat -pp"的大概就是人们想要的东西。
Canella

1
我以前一直使用pygmentize为cat着色,但是bat的解决方案更适合大型文件(日志大小为数MB),而pygmentize性能不佳。
Christian.D

34

vimcat 是单文件(shell脚本),效果很好:

http://www.vim.org/scripts/script.php?script_id=4325

最近一次更新是从2013年12月开始。提示:您可以通过强制识别文件类型vimcat -c "set ft=<type>"


12
关于vimcat(或vimpager),真正令人高兴的一件事是它将尊重您在您的定义中定义的颜色方案,~/.vimrc因此在想要进行编辑(vim)或打印输出(vimcat)时,语法高亮将是相同的。请注意,可以在vimpager存储库中找到vimcat的更新版本。
tims

Amaynut的答案年龄较大且类似
olibre 2015年

vimpager不使用我的vim colorscheme。
WhyNotHugo

2
在我不科学的快速测试中,vimcat(1〜2 秒执行时间)比pymentize(〜200ms)慢得多highlight,这比cat(〜20ms)慢得多,而(〜20ms)慢于(〜2ms)。在另一方面,vimcat处理更多的文件类型,比更精确hightlightpygmentize,它仍然比第一次更快vim然后:q。因此,我赢得了这项特定任务的选择。
Penghe Geng

1
@olibre这个答案似乎早于Amaynut的答案。
富兰克林于

31

您正在寻找的工具可能是超级猫(这是Linux Journal发布的快速介绍)。

我意识到这个答案来晚了,而且还不能完全满足OP的要求。因此,我将其添加为参考(对于其他寻求如何为文本文件着色的人可能很有用)。


1
这似乎不太容易,我安装了它并使用了示例配置,但是没有颜色效果
rubo77 2016年

很好,其他一切都太慢了。很好 有关配置的帮助,请参见manpages.debian.org/testing/supercat/spc.1.en.html
okovko

另外,针对各种语言的一些配置:github.com/tanderson92/supercat/tree/master/spcrc
okovko

20

有cat- ccat的彩色版本。从https://github.com/jingweno/ccat/获取。

在Linux / Windows / macOS上安装

它是一个独立的可执行文件,因此要安装它,您可以从https://github.com/jingweno/ccat/releases解压缩操作系统的二进制版本,并将ccat二进制版本复制到/usr/local/bin

如果您要避免使用二进制文件,或者您的平台上没有二进制文件(例如raspberry pi等),则可以在您拥有正常工作的go开发环境apt install golang基于debian的linux或brew install golangmac上)的情况下从源代码进行编译:

go get -u github.com/jingweno/ccat

ccat二进制文件将根据你的创建$GOPATH/bin

通过自制软件在Mac上安装

brew install ccat

别名 cat

cat要用ccatadd in 代替regular ~/.bashrc

alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`

ccat是在Go中实现的,因此它是一个本机二进制文件,其运行速度比基于python的解决方案(例如pygments,后面的模块)要快得多pygmentizecat和之间没有发现明显的速度差异ccat


1
正确的回购名称是什么?Ubuntu 16中的apt-get ccat为我提供了某种加密程序,并在我的终端上有点滑稽的砖头,因为它当前正在尝试加密或解密我的整个proc目录...
Katastic Voyage

@KatasticVoyage:我的坏:由于某种原因,我认为它在存储库中,而我却忘记了如何在Ubuntu盒子中得到它。查看更新后的答案。
ccpizza

2
目前看来,brew install ccat已经足够了,不需要brew tap了。
杰夫·休伊斯曼斯

12

如果您的计算机中装有vim,最好的方法和最简单的方法是使用程序vimcat附带的vim vimpager

  1. 用以下命令安装vimpage git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
  2. 运行vimcat:

    vimcat index.html


我喜欢这个主意,但vimcat是其中速度较慢的一个。它的速度与pygmentize一样慢。比我的机器上的30行bash脚本highlight慢15倍和慢3倍bat
Ponkadoodle

11

source-highlight

也许可能会发现source-highlight 在GNU下发布的有趣内容:与有所不同的软件包highlight

摘录自apt-cache show source-highlight

Description-zh:将源代码转换为语法突出显示的文档。
给出源文件后,该程序将生成一个带有语法高亮显示的文档。
它支持超过100种文件格式的语法突出显示 ...
对于输出,支持以下格式:HTML,XHTML,LaTeX,Texinfo,ANSI颜色转义序列和DocBook

我做了一些别名(Cat和PCat,请参见下文),这是它们的输出

屏幕示例

您可以通过以下方式在Debian上安装

sudo apt-get install source-highlight

并将其添加为别名(例如,在您的计算机中).bash_aliases,如下所示。

alias Cat='source-highlight --out-format=esc -o STDOUT -i'  
Cat myfile.c # or myfile.xml ...

或者你也可以(不包括做一个类似的别名,-i在最后有可能性的管道

alias PCat='source-highlight --out-format=esc -o STDOUT '
tail myfile.sh | PCat     # Note the absence of the `-i`

当中的选项,它可能从阅读man source-highlight-s是可以选择下划线,或,通过命令行高亮或离开该程序这个义务:

-s,-- src-lang = STRING源语言(使用--lang-list获取完整列表)。 如果未指定,将从文件扩展名中猜测源语言

--lang-list列出所有支持的语言和关联的语言定义文件


1
如果你也想彩色化lesssource-highlight,有人在GitHub上给出了答案:export LESSOPEN="| source-highlight -f esc -i %s -o STDOUT"export LESS=" -R "。在pygmentize不可用且无法安装时非常有用。
Lalylulelo

8

据我了解,二进制本身不负责颜色。它是外壳。

那是不对的。终端仅解释输出到终端的颜色代码。根据其功能,它可以忽略某些格式/颜色代码。

从手册页看,cat似乎不支持为输出着色。即使它支持像grep这样的着色,它在文本文件中应如何着色?语法突出显示了所需的基础语言知识,这不在像cat这样的简单实用工具的范围内。

如果看到突出显示的代码是您的目标,则可以在unix平台上尝试使用功能更强大的编辑器,如vim,emacs,gedit等。


3
cat不是用于打印具有行号的文件,不是用于压缩多行空白,不是用于查看非打印的ASCII字符,而是用于连接文件。” –从UNIX风格或cat -v被认为有害
斯科特



3

老问题,只是回答记录以提供最终使用的解决方案。也许这有点怪(可能不是该参数的初衷),但:

别名cgrep ='grep -C 9000'

猫什么 cgrep'snozzberries'

.. grep -C N将在找到的项目上方和下方提供N条上下文。如果大于输入,则包括整个输入。在这种情况下,我们只是要确保它大于我们要手动查看的任何典型终端输出,这通常是突出显示时要执行的操作。

编辑: 但是,贝尼·切尔尼亚夫斯基-帕斯金(Beni Cherniavsky-Paskin)在下面建议的这种解决方案是更好的-它匹配(并突出显示)您要查找的单词或行首(不突出显示)。最终结果正是您想要的。

cat whatever | egrep 'snozzberries|$'

感谢Beni,这是我为该问题所见的最佳新解决方案。


2
在包括所有线条的同时突出显示图案的更强大的方法是egrep 'snozzberries|$'
Beni Cherniavsky-Paskin 2014年


1

我已经编写了一个小脚本来使用进行着色pygmentize

colorize_via_pygmentize() {
    if [ ! -x "$(which pygmentize)" ]; then
        echo "package \'Pygments\' is not installed!"
        return -1
    fi

    if [ $# -eq 0 ]; then
        pygmentize -g $@
    fi

    for FNAME in $@
    do
        filename=$(basename "$FNAME")
        lexer=`pygmentize -N \"$filename\"`
        if [ "Z$lexer" != "Ztext" ]; then
            pygmentize -l $lexer "$FNAME"
        else
            pygmentize -g "$FNAME"
        fi
    done
}

然后为脚本创建别名。alias cat=colorize_via_pygmentize。也不要忘记将其保存在〜/ .bashrc中


0

如果您只希望一个衬板将cat输出设置为给定的颜色,则可以附加

alias cat="echo -en 'code' | cat - "

给你 ~/.$(basename $SHELL)rc

这是带有颜色代码的要点:https : //gist.github.com/chrisopedia/8754917

我喜欢'\e[1;93m'高强度的黄色。看起来像这样:在此处输入图片说明


0

只需使用vim和这个vimrc文件即可

单线:

vim -c '1' -c 'set cmdheight=1' -c 'set readonly' -c 'set nomodifiable' -c 'syntax enable' -c 'set guioptions=aiMr' -c 'nmap q :q!<CR>' -c 'nmap <Up> <C-Y>' -c 'nmap <Down> <C-E>' -c 'nmap ^V <C-F><C-G>' "$@" 

nano -v 也可以选择。


0

放在你的〜/ .bashrc中

function ccat() { docker run -it -v "$(pwd)":/workdir -w /workdir whalebrew/pygmentize $1; }

然后

ccat filename

Whalebrew为Docker映像创建别名,因此您可以像运行本机命令一样运行它们。就像Homebrew,但带有Docker映像。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.