语法高亮/着色猫

时间:2011-10-21 14:47:59

标签: unix syntax-highlighting color-scheme

是否有方法将cat的输出着色,grep的方式。

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

据我所知,程序本身不对颜色负责。这是壳。

我使用的是FreeBSD 5.2.1中的默认shell,它看起来像是从纪元以来从未见过的颜色。

19 个答案:

答案 0 :(得分:370)

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

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

如果你想要行号:

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

答案 1 :(得分:103)

选项:

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 highlighting on python file

这是highlightHighlight highlighting on python file

答案 2 :(得分:31)

您正在寻找的工具可能是supercat(这是Linux Journal发布的quick introduction)。

我意识到这个答案很晚,并且它不能完全满足OP的要求。所以我只是为了参考而添加它(对于寻找如何着色文本文件输出的其他人来说,这可能很有用)。

答案 3 :(得分:29)

vimcat是单文件(shell脚本)并且运行良好:

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

上次更新时间是2013年12月。提示:您可以vimcat -c "set ft=<type>"强制进行文件类型识别。

答案 4 :(得分:26)

从2018年4月下旬开始:

  

Bat - 具有语法突出显示和Git集成的cat(1)克隆。

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

  

bat尝试实现以下目标

     
      
  • 提供精美,高级的语法高亮显示
  •   
  • 与Git集成以显示文件修改
  •   
  • 是(POSIX)猫的直接替代品
  •   
  • 提供用户友好的命令行界面
  •   

毋庸置疑,它比pygmentize快得多,并且在面对大文件时不会窒息。

可以在Github存储库中找到源代码和binary releases + installation instructions,以及comparison to alternative programs

答案 5 :(得分:23)

语法突出显示的

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来打印二进制文件,并且可以增强逻辑以满足您的需求。

答案 6 :(得分:19)

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

在Linux / Windows / macOS上安装

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

如果你想避免二进制文件,或者你的平台没有二进制文件(例如raspberry pi等),那么你可以从源代码编译,因为你有一个工作go development environment({{1}基于debian的linuxes或mac上的apt install golang

brew install golang
  

go get -u github.com/jingweno/ccat 二进制文件将在ccat下创建。

通过自制程序在Mac上安装

$GOPATH/bin

brew install ccat

的别名

使用cat添加cat来替换常规ccat

~/.bashrc

alias cat="ccat $*" alias cat0="/bin/cat $*" # for cases when you need plain `cat` Go中实现,因此它是一个本机二进制文件,其运行速度比基于Python的解决方案快得多,例如pygmentsccat后面的模块;我在pygmentizecat之间没有看到明显的速度差异。

答案 7 :(得分:11)

source-highlight

也许有可能找到有趣的source-highlight released under GNU:与highlight不同的包。

摘录自apt-cache show source-highlight

  

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

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

Screen Example

您可以使用

在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获取完整列表)。 如果未指定,将从文件扩展名猜测源语言。

     

- 郎列表    列出所有支持的语言和相关语言定义文件

答案 8 :(得分:11)

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

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

    vimcat index.html

答案 9 :(得分:8)

  
    

据我所知,二进制本身不对颜色负责。它是壳。

  

这不正确。终端只解释输出到终端的颜色代码。根据其功能,它可以忽略某些格式/着色代码。

从手册页看起来猫似乎不支持着色其输出。即使它支持像grep这样的着色它应该在文本文件中着色吗?语法突出显示基础语言所需的知识,这些知识不在像cat这样的简单实用程序的范围内。

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

答案 10 :(得分:7)

在OSX上只需brew install ccat

https://github.com/jingweno/ccat。像cat一样,但显示带语法高亮的内容。内置Go。

答案 11 :(得分:3)

老问题,只是回答记录,提供我最终使用的解决方案。也许这有点hacky(可能不是参数的原始意图),但是:

<击> 别名cgrep =&#39; grep -C 9000&#39;

cat what | cgrep&#39; snozzberries&#39;

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

编辑:然而,Beni Cherniavsky-Paskin在下面提出的这个解决方案是优越的 - 它匹配(和突出显示)您要查找的单词或行的开头(不突出)。最终结果正是您想要的。

cat whatever | egrep 'snozzberries|$'

这是我见过的最佳解决方案,感谢Beni。

答案 12 :(得分:2)

在此问题中,https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordin grcat / grc工具被建议替代supercat

grcgrcat的人;它是grc packagesources)的一部分:

  

grc - 泛型colouriser grcat的前端(1)

     

grcat - 从标准输入读取,着色并写入标准输出

答案 13 :(得分:2)

bat正是这样做的,并且可以别名为cat alias cat='bat'

答案 14 :(得分: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

答案 15 :(得分:0)

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

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

到您的~/.$(basename $SHELL)rc

以下是要点,其颜色代码为:https://gist.github.com/chrisopedia/8754917

我喜欢'\e[1;93m',它是高强度的黄色。看起来像这样:enter image description here

答案 16 :(得分:0)

只需使用vim和this vimrc file

oneliner:

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也可以选择。

答案 17 :(得分:0)

放入〜/ .bashrc

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

然后

ccat filename

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

答案 18 :(得分:0)

这个问题非常古老,但我还是偶然发现了它。为了完整起见,问题是“有没有办法让 cat 为其输出着色?”。是的,对于 ansi 编码的输出,您可以将这些导出添加到您的 .bashrc:

# colorful less output
export LESS_TERMCAP_mb=$'\e[1;32m'
export LESS_TERMCAP_md=$'\e[1;32m'
export LESS_TERMCAP_me=$'\e[0m'
export LESS_TERMCAP_se=$'\e[0m'
export LESS_TERMCAP_so=$'\e[01;33m'
export LESS_TERMCAP_ue=$'\e[0m'
export LESS_TERMCAP_us=$'\e[1;4;31m'

这将使 ansi 编码文本的输出着色,例如 terraform plan: enter image description here

不过这和bat不是一回事,可以更好的解析json,显示行号,一般来说用户体验更好。