コマンドラインインターフェース

シェルからPygmentsを使用するには、pygmentizeスクリプトがインストールされている必要があります。

$ pygmentize test.py
print "Hello World"

これにより、ファイル test.py が標準出力に出力されます。Pythonレクサー(ファイル名拡張子から推測)とターミナルフォーマッター(明示的なフォーマッター名が指定されていないため)が使用されます。

Windowsを使用している場合、ターミナルでカラー出力が機能するためには、追加のツールが必要になる場合があります。PygmentsがWindowsコンソールカラーリングサポート付きでインストールされていることを確認するには、windows-terminalエクストラを使用してPygmentsをインストールしてください(例:pip install pygments[windows-terminal])。

pygmentizeは、ターミナルがサポートする最大色数を検出しようとします。16色と256色のカラーフォーマッターの違いは非常に大きいですが、256色と1600万色のカラーフォーマッターの違いはそれほど顕著ではありません。

以下は、ターミナルがサポートする最大色数を検出するプロセスです。COLORTERM環境変数がtruecolorまたは24bitのいずれかに設定されている場合、1600万色表現(terminal16mなど)を使用します。次に、環境変数TERMのどこかに256があるかどうかを検索し、256色表現(terminal256など)を使用します。これらのいずれも見つからない場合は、16色表現(terminalなど)にフォールバックします。

HTML出力を取得したい場合

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

ご覧のとおり、-lオプションはレクサーを明示的に選択します。上記のように、入力ファイル名を指定し、そのファイルにPygmentsが認識する拡張子がある場合は、このオプションを省略できます。

-oオプションは、出力ファイル名を指定します。指定されていない場合は、出力は標準出力に書き込まれます。

-fオプションはフォーマッターを選択します(-lと同様に、出力ファイル名が指定され、サポートされている拡張子を持つ場合は省略できます)。出力ファイル名が指定されておらず、-fが省略された場合は、TerminalFormatterが使用されます。

上記のコマンドは、次のように指定することもできます。

$ pygmentize -o test.html test.py

行番号とスタイルシート(「emacs」スタイルを使用)を含む完全なHTMLドキュメントを作成するには、Pythonファイルtest.pytest.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

スペースや*のような展開ワイルドカードなど、特別なシェル文字が含まれている場合は、オプション文字列を引用符で囲むようにしてください。オプションがリスト値を予期する場合は、リストエントリをスペースで区切ります(この場合も、シェルが分割しないようにオプション値を引用符で囲む必要があります)。

-Oオプションの引数はコンマで分割され、分割された値がname=valueの形式であることを予期しているため、コンマや等号を含むオプション値を指定することはできません。したがって、-Oと同様に機能するが、-Pごとに1つのオプションのみを渡すことができるオプション-Pが提供されます(Pygments 0.9以降)。その値にはすべての文字を含めることができます。

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

フィルタは、-Fオプションを使用してトークンストリームに追加されます。

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

ご覧のとおり、フィルタのオプションはコロンの後に指定されます。-Oと同様に、フィルタ名とオプションは1つのシェルワードである必要があり、コロンの周りにスペースを入れることはできません。

スタイルの生成

通常、フォーマッターは完全なスタイル情報を出力しません。たとえば、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モデルラインと、一部の言語のシバンも検索します。使い方は次のとおりです。

$ pygmentize -g setup.py

ただし、このオプションはあまり信頼性が高くないため、Pygmentsがファイルの拡張子から正しいレクサーを推測できない場合にのみ使用する必要があることに注意してください。

EOFまでの標準入力のハイライト

-sオプションは、ファイル全体を処理するのを待つのではなく、EOFまで1行ずつ処理します。これは標準入力でのみ機能し、行をまたがる構造のないレクサーでのみ機能し、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オプションは、レクサー、フォーマッター、それらの短い名前とサポートされているファイル名拡張子、スタイル、およびフィルタを一覧表示します。1つのカテゴリのみを表示する場合は、引数として指定します。

$ 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)になります。