命令行界面¶
你可以从 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
)。