ファイルに構文強調表示する方法は?

ファイルに構文強調表示する方法は?

catソースファイルで使用するときに構文を強調表示したコード行を出力するバリアントはありますか?

1つの考え:おそらく、または他の編集者にそのファイルの構文強調表示された内容をダンプしてすぐに終了するようにvi[m]求められますか?stdout

答え1

ファイル転送pygmentize-f terminalファイル名の種類を検出し、適切に強調表示します。

答え2

これ強調されたソースパッケージには、ANSIエスケープシーケンスで強調表示されたesc.outlang出力言語定義が付属しています。

パッケージには便利なラッパーも含まれているので、src-hilite-lesspipe.sh強調表示された出力を端末に表示するのはただsrc-hilite-lesspipe.sh source.file

実際に主な理由は、withのsrc-hilite-lesspipe.sh使用を自動化するのに役立ちます。以下を設定します。source-highlightless

export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '

これにより、強調less source.file表示されたソースコードが表示されます。 (不明な言語のコードは変更なしで渡されます。たとえば、リダイレクトされたコンテンツの場合、強調表示もスキップされます。less < source.file

答え3

強調する使いやすく、従来よりも高速です。pygmentize

答え4

@ Ignacio Vazquez-Abramsの答えに対する@Mikael Öhmanのコメントに基づいpygmentscat

#! /usr/bin/env python3

from argparse import ArgumentParser
import subprocess
import os
import os.path


def main():
    parser = ArgumentParser(description='cat alternative that uses ANSI characters')
    parser.add_argument('file', help='the file to print out the contents of', type=str)
    args = parser.parse_args()
    if not os.path.isfile(args.file):
        parser.error(f'file not found: {args.file}')
    cat = False
    result = subprocess.run(('pygmentize -f terminal256 -O style=native ' + args.file).split(), stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
    )
    if result.stderr:
        cat = True
    commands = {
        True: 'cat ',
        False: 'pygmentize -f terminal256 -O style=native '
    }
    os.system(commands[cat] + args.file)


if __name__ == '__main__':
    main()

関連情報