命令行界面

你可以从 shell 中使用 Pygments,只要你安装了 pygmentize 脚本

$ pygmentize test.py
print "Hello World"

将使用 Python lexer(从文件名扩展名推断)和终端格式化器(因为你没有给出明确的格式化器名称),把文件 test.py 打印到标准输出。

如果你想要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

选项和过滤器

Lexer 和 formatter 选项可以使用 -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 格式化器默认只输出 <span> 标签和 class 属性。因此,有一个特殊的 -S 选项用于生成样式定义。使用方法如下

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

生成一个 CSS 样式表(因为你选择了 HTML 格式),为 “colorful” 样式预置一个 “.syntax” 选择器到所有样式规则。

要解释 -a一个特定的格式化器 的含义,请寻找格式化器的 get_style_defs() 方法的 arg 参数。

获取词库名称

1.0 新版功能.

-N 选项为给定的文件名猜测一个词库名称,以便

$ pygmentize -N setup.py

将打印出 python。它还不会高亮显示任何东西。如果该文件名没有特定的词法,则打印 text

此外,还有 -C 选项,它就像 -N 一样,只是它只根据标准输入的给定内容打印出一个词库名称。

从文件内容猜测 lexer

-g 选项将尝试从文件内容中猜测正确的词法,如果无法猜测,则以纯文本形式通过。这个选项也会在文本中寻找 Vim 的模式,对于 某些 语言,还会寻找 shebangs。使用方法如下

$ pygmentize -g setup.py

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

高亮显示 stdin 直到 EOF

-s 选项一次处理一行,直到 EOF,而不是等待处理整个文件。这只适用于 stdin,只适用于没有跨行结构的 lexer,并且用于流式输入,如你从 tail -f 得到的输入。使用方法如下

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

自定义 Lexer 和 Formatter

2.2 新版功能.

-x 标志使自定义 lexer 和 formatter 可以从相对于当前目录的文件中加载。用名为 CustomLexer 或 CustomFormatter 的类创建一个文件,然后在命令行中指定它

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

你也可以用冒号来指定你的类的名称

$ pygmentize -l your_lexer.py:SomeLexer -x

更多信息,请参阅 Pygments 关于 Lexer 开发的文档

获得帮助

-L 选项列出了 lexer、formatter,以及它们的短名称和支持的文件名扩展名、样式和过滤器。如果你想只看到一个类别,请给它一个参数

$ pygmentize -L filters

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

2.11 新版功能.

--json 选项可以和 -L 选项一起使用,将其内容输出为 JSON。因此,如果要以 JSON 格式打印所有已安装的样式和它们的描述,请使用以下命令

$ pygmentize -L styles --json

-H 选项将给你提供关于一个 lexer、formatter 或 filter 的详细信息(与本文档中可以找到的信息相同)。使用方法如下

$ pygmentize -H formatter html

将打印 HTML 格式化器的帮助,而

$ pygmentize -H lexer python

将打印 Python lexer 的帮助,等等。

关于编码的说明

0.9 新版功能.

Pygments 试图在格式化过程中对编码进行智能处理:

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

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

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

  • 如果你没有给出一个编码,并且已经给出了一个输出文件,那么 lexer 和 formatter 的默认编码是终端编码或系统的默认 locale 编码。作为最后的手段,使用 latin1 (它将通过所有非 ASCII 字符)。

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