파일에 구문 강조를 표시하는 방법은 무엇입니까?

파일에 구문 강조를 표시하는 방법은 무엇입니까?

cat소스 파일에서 사용될 때 구문 강조 표시된 코드 줄을 출력하는 변형이 있습니까?

한 가지 생각: 아마도 또는 다른 편집자에게 해당 파일의 구문 강조된 내용을 덤프 하고 즉시 종료하도록 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의 의견을 바탕 pygments으로 cat.

#! /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()

관련 정보