cat可以使用颜色中的代码标记显示文件吗?


45

有时我很快想从命令行查看文件的内容。我当然会为此使用cat它,但是它通常是PythonJava或简单HTML的源文件。对于这些文件,如果cat可以给文件加上一些颜色标记,将很方便,这样阅读起来就更加容易。

可以cat做这样的事情吗?


这可能已经在这里
Wilf 2014年

哈@wilf我发现与谷歌相同的代码:d还值得一对SO提这个话题:superuser.com/questions/84426/...
Rinzwind

@Rinzwind-我搜索了stackoverflow,因为它肯定会出现;-)
Wilf

这个问题使我想起了cat -v有害的东西
雪球2014年

Answers:


48

cat无法做到这一点。但是,也许pygments可以在这里为您提供帮助。这是一个python脚本,可以通过apt-get安装

sudo apt-get install python-pygments

或通过easy_install轻松下载并安装。

它支持多种源代码语言和标记语言

它由

pygmentize -g <filename>

5
as打开文件pygmentize -g <filename>,此-g开关对于不使用lexer处理文件很重要。例如,如果您尝试/etc/fstab不打开-g它就会失败。
souravc 2014年

感谢@souravc将其添加到答案中。有趣的是,在手册页或帮助页中似乎没有提到该论点
txwikinger 2014年

2
好吧,我玩了很多。您可以找到它,尝试pygmentize --help 如果-g通过,则尝试从文件内容中猜测词法分析器,如果失败,则以纯文本形式通过(对于stdin可以使用)。
souravc 2014年

4
这是最好的,然后将别名cat进行pygmentize -g,您会很高兴。在鱼中,它很简单funced cat... type pygmentize -g $argv... save..funcsave cat
伊利亚·林恩2015年

在我的bashrc补充中: command -v pygmentize >/dev/null 2>&1 && alias cat='pygmentize -g'
Antonios Hadjigeorgalis

19

不是从cat本身,但你可以使用像源的HIGHlitesupercat亮点

源高亮

给出源文件后,该程序将生成一个带有语法高亮显示的文档。它还提供了C ++高亮库(新版本)(从3.0版开始)。

Source-highlight动态读取源语言规范,因此可以轻松扩展(无需重新编译源代码)以处理新语言。它还动态读取输出格式规范,因此可以轻松扩展(无需重新编译源代码)以处理新的输出格式。这些规范的语法非常简单(请参阅手册)。

关于安装的手册:

有关详细的构建和安装说明,请参阅文件INSTALL。无论如何,如果您习惯于编译源代码附带的Linux软件,则可以按照通常的步骤操作,即,将下载的文件解压缩到目录中,然后:

 cd <source code main directory>
 ./configure
 make
 make install

超级猫

这是Supercat的主页。Supercat是一个程序,可根据匹配的正则表达式/字符串/字符为文本着色。Supercat支持html输出以及标准ASCII文本。与现有的某些文本着色程序不同,Supercat不需要您必须是程序员才能制定着色规则。

如果您已经为标准文件类型编写了超级猫配置文件,请随时通过“ bug-spc(at)nosredna(dot)net”与我联系,以获得可能包含在超级猫分发中的信息。

或带有一个函数source):

#!/bin/bash#!/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

要求:Pygmentssudo apt-get install python-pygments python3-pygments)将其作为函数添加到bash .functions中,并为其命名,例如color()


14

从这里的答案开始,您可以使用python-pygments软件包突出显示内容。首先要做的是:

sudo apt-get install python-pygments python3-pygments

然后:

pygmentize -g FILENAME

然后去:

在此处输入图片说明

您还可以将其设置为别名,就像我链接的答案一样-基本上,运行以下命令:

echo "alias catc='pygmentize -g'" >> ~/.bash_aliases 
chmod +x ~/.bash_aliases

关闭终端,再次打开终端,该catc命令现在应该可以运行-如果没有,请确保这些行在.bashrc文件中并且未注释:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

另一件事是只使用nano

nano testfile

在此处输入图片说明


6

man view 要么 man vim

基本用法: view <filename>

退出:(如果使用,则:q<Return>添加<Esc>第一个vim),或ZZ(大写字母z两次)。

程序员的文本编辑器vim已具备您所需要的一切,并且可能已经成为系统的一部分。

vim使用view或激活了只读模式vim -R。如果您只需要查看标记的文件,就足够了。

简单易用,可导航,随处可见。无需为安装新软件或编写bash脚本而烦恼。


我知道。问题是打开和关闭VIM并不很快。我想立即查看文件,然后在命令行上继续。这就是为什么我发现pygmentize这么好。即时结果,无需退出程序或任何其他方法.. :)
kramer65

1
@ kramer65当然可以,这是您的偏爱,但是您无需“打开” vimview,您只需将它提供给file :,因此与view file.py没什么区别cat。当然,您需要关闭它,但实际上,:q<Return>或者ZZ不是困难的任务。
不同的本

主要的问题是vi / vim / view不会写到stdout,所以在浏览上面突出显示的语法时,我不容易编写命令。
Jack_Hu


3

cat不能仅产生语法突出显示。您仍然可以使用进行以下操作python-pygments。首先从终端安装它,

sudo apt-get install python-pygments

现在复制下面的函数~/.bashrc。它会为您提供所需的内容,并且会保留其属性,cat否则将毫无用处cat

catc(){
    cat "$@" > /tmp/.tmp
    pygmentize -g /tmp/.tmp
    rm /tmp/.tmp
}

来源~/.bashrc

. ~/.bashrc

它将产生彩色输出,

catc <filename>

它也将与颜色串联在一起,

catc <file1> <file2> ... <filen>

使用时是否有一种启用上下箭头滚动的方法, pygmentize? 我使用表单命令打开它xterm -e "pygmentize -g <filename>" ,发现滚动的唯一方法是使用滚动条。我尝试将输出管道到,less但是导致了垃圾输出。
Leo Simon

是的,您可以减少使用pygmentize。创建一个bash函数lessc,如下所示:lessc () { pygmentize -gf terminal "$1" | less -R }
souravc '16

2

蝙蝠—带翅膀的猫克隆

您可能还想查看一下bat具有以下功能的产品:

  • 语法高亮
  • Git集成
  • (可选)显示不可打印的字符
  • 自动分页 less
  • 文件串联作为cat重定向时的直接替代

 预习

蝙蝠的屏幕快照,显示彩色文件

图片来自官方GitHub

安装

您可以在这里获得最新的Debian软件包并使用以下命令进行安装:

sudo dpkg -i bat_0.10.0_amd64.deb

修改版本号和体系结构。



0

无需安装第三方软件包,您只需使用gedit语法突出显示即可快速查看文件。例如,复制上方的地址栏,然后粘贴到您的终端中:

gedit https://askubuntu.com/questions/405960/can-cat-show-files-using-code-markup-in-colors

您将在HTML中以格式化的颜色看到此问题:

gedit https.png

  • 您可以使用熟悉的gedit导航键
  • 您可以打开/关闭换行
  • 您可以使用类似我已安装的80个字符装订线和带有缩略图滑块的文档概述(最右侧)的插件
  • 唯一需要注意的是,您需要记住Alt+ F4以快速关闭窗口以模拟cat不需要关闭击键的窗口。
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.