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

《 初回公開:2022/03/26 , 最終更新:未 》

原文は

旧バージョンの記事は

【 目次 】

pygmentizeスクリプトをインストールした場合は、シェルからPygmentsを使用できます。

$ pygmentize test.py
print "Hello World"

Pythonレクサー(ファイル名拡張子から推測)とターミナルフォーマッター(明示的なフォーマッター名を指定しなかったため)を使用して、ファイル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

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

オプション文字列にスペースや*などの拡張ワイルドカードなどの特殊なシェル文字が含まれている場合は、必ず引用符で囲んでください。
オプションがリスト値を期待する場合は、リストエントリをスペースで区切ります(この場合も、シェルが分割しないように、オプション値を引用符で囲む必要があります)。
-Oオプション引数はコンマで分割され、分割値はname = valueの形式であると想定されるため、コンマまたは等号を含むオプション値を指定することはできません。
したがって、-Oのように機能するオプション-Pが提供されますが(Pygments 0.9以降)、-Pごとに1つのオプションしか渡すことができません。
その値には、すべての文字を含めることができます。

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

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

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

ご覧のとおり、フィルターのオプションはコロンの後にあります。
-Oの場合、フィルター名とオプションは1つのシェルワードである必要があるため、コロンの周囲にスペースを入れないでください。

スタイルの生成

フォーマッタは通常、完全なスタイル情報を出力しません。
たとえば、HTMLフォーマッタは、デフォルトでは、クラス属性を持つ<span>タグのみを出力します。
したがって、スタイル定義を生成するための特別な-Sオプションがあります。 使用法は次のとおりです。

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

すべてのスタイルルールの前に「.syntax」セレクターを追加する「カラフルな」スタイルのCSSスタイルシートを生成します(HTMLフォーマッターを選択したため)。
特定のフォーマッターにとって-aが何を意味するかについては、フォーマッターのget_style_defs()メソッドのarg引数を探してください。

レクサー名の取得

バージョン1.0の新機能。

-Nオプションは、指定されたファイル名のレクサー名を推測する、これによって

$ pygmentize -N setup.py

Pythonと出力されます。 まだ何もhighlightされていません。
そのファイル名に特定のレクサーがわからない場合は、テキストと出力されます。
さらに、-Cオプションがあります。これは、標準入力からの特定のコンテンツのみに基づいてレクサー名を出力することを除いて、-Nと同じです。

ファイルの内容からレクサーを推測する

-gオプションは、ファイルの内容から正しいレクサーを推測しようとするか、推測できない場合はプレーンテキストとしてパススルーします。
このオプションは、テキスト内のVimモードラインも検索し、一部の言語ではshebang(シバン)も検索します。
使用法は次のとおりです。

$ pygmentize -g setup.py

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

愚鈍人の独り言

Vimモードラインって何だろう?

シバンみたいなものかな

EOFまでのstdinのハイライト

-sオプションは、ファイル全体の処理を待つのではなく、EOFまで一度に1行ずつ処理します。
これはstdinでのみ機能し、行にまたがる構造を持たないレクサーでのみ機能し、tail-fから取得するようなストリーミング入力を対象としています。

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

愚鈍人の独り言

tail-fというのはUNIXのtailコマンド,fオプション付きの事で、ログの監視によく使われるみたいで。

カスタムレクサーとフォーマッター

バージョン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.2の新機能。

--jsonオプションを-Lオプションと組み合わせて使用すると、その内容をJSONとして出力できます。 したがって、インストールされているすべてのスタイルとその説明をJSONで出力するには、次のコマンドを使用します。

$ pygmentize -L styles --json

-Hオプションは、レクサー、フォーマッター、またはフィルターに関する詳細情報(このドキュメントに記載されているものと同じ)を提供します。 使用法は次のとおりです。

$ pygmentize -H formatter html

HTMLフォーマッタのヘルプを出力しますが、

$ pygmentize -H lexer python

Pythonレクサーなどのヘルプを出力します。

エンコーディングに関する注意

バージョン0.9の新機能。

Pygmentsは、フォーマット過程でのエンコーディングに関して高機能であろうと試みます。

  • encodingオプションを指定すると、それが入力および出力エンコーディングとして使用されます。
  • outencoding オプションを指定すると、出力エンコーディングとしてエンコーディングが上書きされます。
  • inencodingオプションを指定すると、入力エンコーディングとしてエンコーディングが上書きされます。
  • encodingを指定せず、出力ファイルを指定した場合、レクサーとフォーマッタのデフォルトのエンコーディングは、システムのターミナルエンコーディングまたはデフォルトのロケールエンコーディングです。 最後の手段として、latin1が使用されます(これはすべての非ASCII文字を通過します)。
  • encodingを指定せず、出力ファイルを指定していない場合(つまり、出力がコンソールに書き込まれる場合)、レクサーとフォーマッターのデフォルトのエンコーディングはターミナルエンコーディング(sys.stdout.encoding)です。
ページのトップへ戻る