有没有上色的输出的方法cat
,该方法grep
一样。
对于grep
,在大多数控制台中,它显示彩色输出,突出显示搜索到的关键字。否则,可以通过调用“ grep --color
是否有一种通用方法来根据您的个人选择为任何程序的输出着色” 来强制执行此操作。
据我了解,程序本身不负责颜色。它是外壳。
我在FreeBSD 5.2.1中使用了默认的shell,它看起来从时代开始就从未见过颜色。
有没有上色的输出的方法cat
,该方法grep
一样。
对于grep
,在大多数控制台中,它显示彩色输出,突出显示搜索到的关键字。否则,可以通过调用“ grep --color
是否有一种通用方法来根据您的个人选择为任何程序的输出着色” 来强制执行此操作。
据我了解,程序本身不负责颜色。它是外壳。
我在FreeBSD 5.2.1中使用了默认的shell,它看起来从时代开始就从未见过颜色。
Answers:
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
cat
用一些硬编码调用替换该脚本,$cmd
如果有两个参数,则初始化为$ 1;如果只有一个,则默认为默认值。然后,您只需编写:colorful.sh grep file
。
pygmentize
是不能上色的。有小费吗?
我建议pygmentize
从python包开始python-pygments
。您可能需要定义以下方便的别名(除非您ccat
从ccrypt包中使用)。
alias ccat='pygmentize -g'
如果要行号:
alias ccat='pygmentize -g -O style=colorful,linenos=1'
highlight
命令。alias ccat='highlight -O ansi'
alias dog='pygmentize -g'
,因为狗比猫还凉!
#!/bin/bash \n pygmentize -g $1 | less -R
nyancat
。
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
起作用:
这是highlight
:
highlight
非常适合我的需求,并且安装简单,谢谢。如果你想看看文件,而不扩展(例如.bash_aliases),然后添加--syntax=bash
除了-O ansi
迫使它。
highlight
比该python程序快34倍。古典语言的力量很强大。
highlight
,您想添加--force
到别名,否则,它将为它不理解的文件格式抛出错误,而作为cat
替换,您希望它仍显示输出而不突出显示,这是正确的--force
。一起:alias cat="highlight -O ansi --force"
-O ansi
默认值以输出html的原因:-)
从2018年4月下旬开始:
蝙蝠 -具有语法高亮和Git集成的cat(1)克隆。
该项目是猫克隆,支持用Rust编写的颜色和自定义。它不仅提供具有多个主题的语法高亮显示,还提供Git集成。如文档中所述:
蝙蝠试图实现以下目标:
- 提供精美的高级语法突出显示
- 与Git集成以显示文件修改
- 替代(POSIX)cat
- 提供用户友好的命令行界面
不用说,它比pygmentize快得多,并且在遇到大文件时不会阻塞。
bat
默认情况下处于交互模式。为了使其表现得更像cat
,请将其与-pp
参数一起使用。别名之类alias cat="bat -pp"
的大概就是人们想要的东西。
vimcat
是单文件(shell脚本),效果很好:
http://www.vim.org/scripts/script.php?script_id=4325
最近一次更新是从2013年12月开始。提示:您可以通过强制识别文件类型vimcat -c "set ft=<type>"
。
~/.vimrc
因此在想要进行编辑(vim)或打印输出(vimcat)时,语法高亮将是相同的。请注意,可以在vimpager存储库中找到vimcat的更新版本。
vimpager
不使用我的vim colorscheme。
vimcat
(1〜2 秒执行时间)比pymentize
(〜200ms)慢得多highlight
,这比cat
(〜20ms)慢得多,而(〜20ms)慢于(〜2ms)。在另一方面,vimcat
处理更多的文件类型,比更精确hightlight
和pygmentize
,它仍然比第一次更快vim
然后:q
。因此,我赢得了这项特定任务的选择。
您正在寻找的工具可能是超级猫(这是Linux Journal发布的快速介绍)。
我意识到这个答案来晚了,而且还不能完全满足OP的要求。因此,我将其添加为参考(对于其他寻求如何为文本文件着色的人可能很有用)。
有cat- ccat的彩色版本。从https://github.com/jingweno/ccat/获取。
它是一个独立的可执行文件,因此要安装它,您可以从https://github.com/jingweno/ccat/releases解压缩操作系统的二进制版本,并将ccat二进制版本复制到/usr/local/bin
。
如果您要避免使用二进制文件,或者您的平台上没有二进制文件(例如raspberry pi等),则可以在您拥有正常工作的go
开发环境(apt install golang
基于debian的linux或brew install golang
mac上)的情况下从源代码进行编译:
go get -u github.com/jingweno/ccat
该
ccat
二进制文件将根据你的创建$GOPATH/bin
。
brew install ccat
cat
cat
要用ccat
add in 代替regular ~/.bashrc
:
alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`
ccat
是在Go中实现的,因此它是一个本机二进制文件,其运行速度比基于python的解决方案(例如pygments,后面的模块)要快得多pygmentize
。cat
和之间没有发现明显的速度差异ccat
。
brew install ccat
已经足够了,不需要brew tap
了。
如果您的计算机中装有vim,最好的方法和最简单的方法是使用程序vimcat
附带的vim vimpager
。
git clone git://github.com/rkitover/vimpager
cd vimpager
sudo make install
运行vimcat:
vimcat index.html
highlight
慢15倍和慢3倍bat
。
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列出所有支持的语言和关联的语言定义文件
less
用source-highlight
,有人在GitHub上给出了答案:export LESSOPEN="| source-highlight -f esc -i %s -o STDOUT"
和export LESS=" -R "
。在pygmentize
不可用且无法安装时非常有用。
据我了解,二进制本身不负责颜色。它是外壳。
那是不对的。终端仅解释输出到终端的颜色代码。根据其功能,它可以忽略某些格式/颜色代码。
从手册页看,cat似乎不支持为输出着色。即使它支持像grep这样的着色,它在文本文件中应如何着色?语法突出显示了所需的基础语言知识,这不在像cat这样的简单实用工具的范围内。
如果看到突出显示的代码是您的目标,则可以在unix平台上尝试使用功能更强大的编辑器,如vim,emacs,gedit等。
cat
不是用于打印具有行号的文件,不是用于压缩多行空白,不是用于查看非打印的ASCII字符,而是用于连接文件。” –从UNIX风格或cat -v被认为有害。
蝙蝠恰好可以做到这一点,并且可以别名为catalias cat='bat'
老问题,只是回答记录以提供最终使用的解决方案。也许这有点怪(可能不是该参数的初衷),但:
别名cgrep ='grep -C 9000'
猫什么 cgrep'snozzberries'
.. grep -C N
将在找到的项目上方和下方提供N条上下文。如果大于输入,则包括整个输入。在这种情况下,我们只是要确保它大于我们要手动查看的任何典型终端输出,这通常是突出显示时要执行的操作。
编辑: 但是,贝尼·切尔尼亚夫斯基-帕斯金(Beni Cherniavsky-Paskin)在下面建议的这种解决方案是更好的-它匹配(并突出显示)您要查找的单词或行首(不突出显示)。最终结果正是您想要的。
cat whatever | egrep 'snozzberries|$'
感谢Beni,这是我为该问题所见的最佳新解决方案。
egrep 'snozzberries|$'
我已经编写了一个小脚本来使用进行着色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中。
如果您只希望一个衬板将cat
输出设置为给定的颜色,则可以附加
alias cat="echo -en 'code' | cat - "
给你 ~/.$(basename $SHELL)rc
这是带有颜色代码的要点:https : //gist.github.com/chrisopedia/8754917
只需使用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
也可以选择。