有没有什么选项可以让 cat 输出彩色内容?

有没有什么选项可以让 cat 输出彩色内容?

如果我想输出带有语法高亮的 C 源代码文件,我可以使用吗cat

答案1

GNU 软件包,源突出显示,似乎可以解决问题(尽管没有使用 cat —— 正如 John T 指出的那样,这在 cat 上是不可能的)。它可以通过 Ubuntu 上的 apt-get 获得,并且需要 Boost regex 库。检查您的包管理器以查看两者是否可用,否则您可以从网上获取它们。我认为之前链接的 GNU 页面有一个指向 Boost 的链接。

安装后,我在路径中创建了一个名为的新脚本催化裂化装置.脚本如下:

#!/bin/bash
src-hilite-lesspipe.sh $1

没什么特别的,只是简化了较少的它们包含带有 source-highlight 的脚本。当以这种方式调用时,它的行为与 cat 一样。

不过,附带的 less 脚本也很好用。我刚刚将以下内容添加到.bashrc

export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '

该脚本也包含在 source-highlight 的在线手册中。

我想,如果您想完全忽略 cat,您可以使用别名 cat 来调用 src-hilite-lesspipe.sh $1,但这可能并不可取。

答案2

为了输出类似语法高亮的代码cat,我ccat按照以下说明创建了一个命令http://scott.sherrillmix.com/blog/programmer/syntax-highlighting-in-terminal/

#!/bin/bash
if [ ! -t 0 ];then
  file=/dev/stdin
elif [ -f $1 ];then
  file=$1
else
  echo "Usage: $0 code.c"
  echo "or e.g. head code.c|$0"
  exit 1
fi
pygmentize -f terminal -g $file

为了输出类似语法高亮的代码less,我使用 vim 来代替 less。

alias less='/usr/share/vim/vim72/macros/less.sh'

答案3

为了解决这个问题,我使用了强调。我创建了一个函数,尝试使用语法高亮打印文件,如果失败,它会返回到仅使用 cat 打印文件。您可以将语法高亮主题更改为您想要的任何主题。

function hl { # Overrides the cat command to use syntax highlighting
    # Highlight with 'moria' theme to terminal, and suppress errors
    highlight $1 -s moria -O xterm256 2> /dev/null

    if (($? != 0)); then # If the command had errors
        cat $1 # Just cat the file out instead
    fi
}

如果你使用的是 Mac 并且使用 Homebrew(强烈推荐!),则可以通过运行来安装 highlight brew install highlight。否则,它应该在大多数其他包管理器上可用,并且可以下载这里

我还制作了一个函数,将带有语法高亮显示的文件打印为 html,并在浏览器中打开它进行打印(依赖于openOS X 上的命令):

function hlprint {
    # Print with line numbers and 'moria' theme
    highlight $1 -l -o print.html -s moria
    open print.html # Open in browser
    sleep 5 # Give the browser time to open
    rm print.html highlight.css # Remove output files
}

享受!

答案4

不,cat 没有语法高亮功能。如果您想使用语法高亮查看源代码,请将其放入 vim 或您选择的编辑器(具有语法高亮功能)。这样,如果文件很长,您甚至可以使用Ctrl+ F(向前)和Ctrl+ B(向后)翻页查看输出。

相关内容