是否有一种方法为cat的输出着色,就像grep那样。

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

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

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


当前回答

只需使用vim和这个vimrc文件。

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也可能是一种替代方案。

其他回答

我推荐使用python包python- pyptions中的pygmentize。您可能需要定义以下方便的别名(除非您使用ccrypt包中的ccat)。

alias ccat='pygmentize -g'

如果你想要行号

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

向~/添加上述命令中的一个。bash_别名永久生效

带有语法高亮显示的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"

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

我已经写了一个小脚本来执行使用pygmentze着色。

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
}

然后为脚本创建一个别名。别名猫= colorize_via_pygmentize。另外,不要忘记将其保存在~/.bashrc中。

source-highlight

也许可以找到GNU下发布的有趣的source-highlight:一个不同于highlight的包。

摘自apt-cache show source-highlight:

描述- 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 ...

或者你可以做一个类似的别名(没有-iat在结尾,以便管道的可能性)

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 列出所有支持的语言和相关的语言定义文件

有彩色版本的猫(他们的名字很难谷歌,除非你附加寻呼机和github或猫的替代品)。

bat[锈痕]https://github.com/sharkdp/bat (actively维护) ccat [golang] https://github.com/jingweno/ccat/

bat和ccat都是本地二进制文件,几乎和/bin/cat一样快,不像基于python的解决方案,比如pygmentze。

安装蝙蝠

MacOS: brew install bat Linux: apt install bat Windows: choco install bat 二进制文件:https://github.com/sharkdp/bat/releases 从源代码构建:货物安装—锁定蝙蝠(需要货物,生锈的构建工具)

更多操作系统请参见https://github.com/sharkdp/bat#installation

安装 ccat

获取Linux/Windows/macOS的二进制文件,例如将ccat复制到/usr/local/bin。 Mac: brew install ccat

如果你的平台没有二进制文件(例如树莓派等),那么你可以从源代码安装(需要golang环境):

go get -u github.com/jingweno/ccat

# NOTE: as of Go 1.18 instead of 'go get xyz' use 'go install xyz', e.g.
go install github.com/jingweno/ccat@latest

混叠到猫

bat的ootb配置显示行号,并进行分页,这是我不需要的,所以我用别名禁用了我不想要的功能:

加上你的~/。bashrc(~(/。zshrc等):

alias cat="bat --paging=never -pp --style='plain' --theme=TwoDark $*"

美国小妞ccat:

alias cat="ccat $*"

在你需要纯猫的情况下,你仍然可以通过绝对路径调用它:

/bin/cat /etc/hosts