命令行界面

如果安装了 pygmentize 脚本::

$ pygmentize test.py
print "Hello World"

将使用Python词法分析器(从文件扩展名推断)和终端格式化程序(因为您没有给出明确的格式化程序名称)将文件test.py打印到标准输出。 pygmentize 尝试检测终端支持的最大颜色数。16色和256色的颜色格式化程序之间的差异是巨大的,但256和1600万种颜色的颜色格式化程序之间的差异不太明显。

以下是它如何检测您的终端支持的最大颜色数量的过程。如果 COLORTERM 环境变量设置为 truecolor24bit ,它将使用1600万种颜色表示(如 terminal16m )。下一步,它将试图找到 256 是环境变量中的任何位置 TERM ,它将使用256色表示法(例如 terminal256 )。如果没有找到这两种颜色,则会退回到16色表示法(如 terminal )。

如果需要HTML输出:

$ pygmentize -f html -l python -o test.html test.py

如您所见,-l选项显式地选择一个lexer。如上所示,如果您提供一个输入文件名,并且它有一个Pygments可以识别的扩展名,那么您可以省略这个选项。

这个 -o 选项提供输出文件名。如果没有给出,输出将写入stdout。

这个 -f option selects a formatter (as with -l ,如果给定了输出文件名并具有受支持的扩展名,则也可以省略)。如果没有给出输出文件名,并且 -f 被省略, TerminalFormatter 使用。

因此,上述命令也可以如下所示:

$ pygmentize -o test.html test.py

创建完整的HTML文档,包括行号和样式表(使用“emacs”样式),突出显示python文件 test.pytest.html ::

$ pygmentize -O full,style=emacs,linenos=1 -o test.html test.py

选项和筛选器

lexer和格式化程序选项可以使用 -O 选项:

$ pygmentize -f html -O style=colorful,linenos=1 -l python test.py

如果选项字符串包含任何特殊的shell字符(如空格或扩展通配符,如 * . 如果某个选项需要一个列表值,请用空格分隔列表条目(在本例中,您还必须引用选项值,这样shell就不会拆分它)。

自从 -O 选项参数以逗号分隔,并要求拆分值的形式为 name=value ,不能给出包含逗号或等号的选项值。因此,选择 -P is provided (as of Pygments 0.9) that works like -O 但每个只能通过一个选项 -P . 它的值可以包含所有字符::

$ pygmentize -P "heading=Pygments, the Python highlighter" ...

使用将筛选器添加到令牌流 -F 选项:

$ pygmentize -f html -l pascal -F keywordcase:case=upper main.pas

如您所见,过滤器的选项在冒号之后给出。至于 -O ,筛选器名称和选项必须是一个shell单词,因此冒号周围不能有任何空格。

生成样式

格式化程序通常不输出完整的样式信息。例如,默认情况下,HTML格式化程序只输出 <span> 带标签 class 属性。因此,有一个特别的 -S 用于生成样式定义的选项。用法如下:

$ pygmentize -f html -S colorful -a .syntax

为“彩色”样式生成一个CSS样式表(因为您选择了HTML格式设置工具),在所有样式规则前加上一个“.syntax”选择器。

对于一个解释是什么 -a 手段: a particular formatter ,查找 arg 格式化程序的 .get_style_defs() 方法。

获取lexer名称

在 1.0 版本加入.

这个 -N 选项猜测给定文件名的lexer名称,以便:

$ pygmentize -N setup.py

将打印出来 python . 它不会突出显示任何内容。如果该文件名不知道特定的lexer, text 打印。

此外,还有 -C 选项,这就像 -N ,只是它仅根据标准输入中的给定内容打印出词法分析器名称。

从文件内容猜测词法分析器

这个 -g 选项将尝试从文件内容中猜测正确的词法分析器,或者如果猜不到任何内容,则作为纯文本传递。此选项还在文本中查找Vim Modeline,并 some 语言,刘海。用法如下:

$ pygmentize -g setup.py

但是请注意,这个选项不是很可靠,可能只有在Pygments无法从文件扩展名猜测正确的词法分析器时才应该使用。

突出显示标准输入,直到EOF

这个 -s 选项一次处理一行,直到EOF,而不是等待处理整个文件。这只适用于stdin,只适用于没有跨行构造的词法分析器,并且用于流输入,比如从 tail -f 。用法如下:

$ tail -f sql.log | pygmentize -s -l sql

自定义lexer和格式化程序

在 2.2 版本加入.

这个 -x 标志允许从相对于当前目录的文件加载自定义lexer和格式化程序。使用名为CustomLexer或CustomFormatter的类创建文件,然后在命令行上指定该文件::

$ pygmentize -l your_lexer.py -f your_formatter.py -x

还可以用冒号指定类的名称:

$ pygmentize -l your_lexer.py:SomeLexer -x

有关详细信息,请参阅 the Pygments documentation on Lexer development .

得到帮助

这个 -L 选项列出lexer、格式化程序及其短名称和支持的文件扩展名、样式和筛选器。如果只想查看一个类别,请将其作为参数:

$ pygmentize -L filters

将只列出所有已安装的筛选器。

在 2.11 版本加入.

这个 --json 选项可以与 -L 将其内容输出为JSON的选项。因此,要以JSON格式打印所有已安装的样式及其说明,请使用命令::

$ pygmentize -L styles --json

这个 -H 选项将为您提供有关lexer、格式化程序或过滤器的详细信息(与本文档中提供的信息相同)。用法如下:

$ pygmentize -H formatter html

将打印HTML格式化程序的帮助,同时:

$ pygmentize -H lexer python

将打印python lexer等的帮助。

关于编码的注释

在 0.9 版本加入.

Pygments试图在格式化过程中巧妙地编码:

  • 如果你给 encoding 选项,它将用作输入和输出编码。

  • 如果你给 outencoding 选项,它将覆盖 encoding 作为输出编码。

  • 如果你给 inencoding 选项,它将覆盖 encoding 作为输入编码。

  • 如果您没有给出编码并给出输出文件,lexer和formatter的默认编码是终端编码或系统的默认区域设置编码。作为最后的手段, latin1 使用(将通过所有非ASCII字符)。

  • 如果您没有给出编码,也没有给出输出文件(这意味着输出被写入控制台),lexer和formatter的默认编码是终端编码 (sys.stdout.encoding