命令行界面

您可以从 shell 使用 Pygments,前提是您安装了 pygmentize 脚本

$ pygmentize test.py
print "Hello World"

将使用 Python 词法分析器(从文件名扩展名推断)和终端格式化程序(因为您没有给出显式格式化程序名称)将文件 test.py 打印到标准输出。

注意

如果您使用的是 Windows,可能需要额外的工具才能使彩色输出在终端中正常工作。您可以通过使用 windows-terminal 额外安装 Pygments 来确保 Pygments 已安装并具有 Windows 控制台着色支持(例如,pip install pygments[windows-terminal])。

pygmentize 尝试检测终端支持的最大颜色数。16 色和 256 色的彩色格式化程序之间的区别很大,但 256 色和 1600 万色的彩色格式化程序之间的区别并不明显。

以下是它检测您的终端支持的最大颜色数的过程。如果 COLORTERM 环境变量设置为 truecolor24bit,它将使用 1600 万色表示(如 terminal16m)。接下来,它将尝试在环境变量 TERM 中查找 256,它将使用 256 色表示(例如 terminal256)。如果两者都找不到,它将回退到 16 色表示(如 terminal)。

如果你想要 HTML 输出

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

如您所见,-l 选项显式地选择了一个词法分析器。如上所述,如果您给出输入文件名,并且它具有 Pygments 识别的扩展名,您可以省略此选项。

-o 选项给出了输出文件名。如果未给出,则输出将写入 stdout。

-f 选项选择一个格式化程序(与 -l 一样,如果给出输出文件名并且具有受支持的扩展名,也可以省略它)。如果未给出输出文件名并且省略了 -f,则使用 TerminalFormatter

因此,上面的命令也可以写成

$ pygmentize -o test.html test.py

要创建一个完整的 HTML 文档,包括行号和样式表(使用“emacs”样式),将 Python 文件 test.py 突出显示到 test.html

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

选项和过滤器

可以使用 -O 选项给出词法分析器和格式化程序选项

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

如果选项字符串包含任何特殊 shell 字符(例如空格或扩展通配符,如 *),请确保将选项字符串用引号括起来。如果选项需要列表值,请用空格分隔列表项(在这种情况下,您也必须对选项值进行引用,以便 shell 不会将其拆分)。

由于 -O 选项参数在逗号处拆分,并期望拆分后的值的形式为 name=value,因此您无法给出包含逗号或等号的选项值。因此,提供了选项 -P(从 Pygments 0.9 开始),它的作用类似于 -O,但每个 -P 只能传递一个选项。然后,它的值可以包含所有字符

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

使用 -F 选项将过滤器添加到标记流中

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

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

生成样式

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

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

为“colorful”样式生成一个 CSS 样式表(因为您选择了 HTML 格式化程序),并在所有样式规则之前加上“.syntax”选择器。

有关 -a 对 特定格式化程序 的含义的解释,请查找格式化程序的 .get_style_defs() 方法的 arg 参数。

获取词法分析器名称

在版本 1.0 中添加。

-N 选项为给定的文件名猜测词法分析器名称,因此

$ pygmentize -N setup.py

将打印出 python。它还没有突出显示任何内容。如果该文件名没有已知的特定词法分析器,则会打印 text

此外,还有一个 -C 选项,它与 -N 一样,只是它打印出仅根据来自标准输入的给定内容得出的词法分析器名称。

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

-g 选项将尝试从文件内容中猜测正确的词法分析器,或者如果无法猜测,则作为纯文本传递。此选项还会在文本中查找 Vim 模型行,以及对于某些语言的 shebang。用法如下

$ pygmentize -g setup.py

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

突出显示 stdin 直到 EOF

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

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

自定义词法分析器和格式化程序

在版本 2.2 中添加。

-x 标志启用从相对于当前目录的文件加载自定义词法分析器和格式化程序。创建一个名为 CustomLexer 或 CustomFormatter 的类的文件,然后在命令行上指定它

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

您也可以使用冒号指定类的名称

$ pygmentize -l your_lexer.py:SomeLexer -x

有关更多信息,请参见 Pygments 文档关于词法分析器开发

获取帮助

-L 选项列出词法分析器、格式化程序,以及它们的简短名称、支持的文件名扩展名、样式和过滤器。如果您只想查看一个类别,请将其作为参数给出

$ pygmentize -L filters

将只列出所有已安装的过滤器。

在版本 2.11 中添加。

--json 选项可以与 -L 选项结合使用,以 JSON 格式输出其内容。因此,要以 JSON 格式打印所有已安装的样式及其描述,请使用以下命令

$ pygmentize -L styles --json

-H 选项将为您提供有关词法分析器、格式化程序或过滤器的详细的信息(与您可以在本文档中找到的信息相同)。用法如下

$ pygmentize -H formatter html

将打印 HTML 格式化程序的帮助信息,而

$ pygmentize -H lexer python

将打印 Python 词法分析器的帮助信息,等等。

关于编码的说明

在版本 0.9 中添加。

Pygments 尝试在格式化过程中智能地处理编码

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

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

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

  • 如果您没有给出编码,并且给出了输出文件,则词法分析器和格式化程序的默认编码是终端编码或系统的默认区域设置编码。作为最后的手段,将使用 latin1(这将传递所有非 ASCII 字符)。

  • 如果您没有给出编码,并且没有给出输出文件(这意味着输出写入控制台),则词法分析器和格式化程序的默认编码是终端编码 (sys.stdout.encoding)。