.dotfiles의 소스 강조 기본 색상을 만드는 방법은 무엇입니까?

.dotfiles의 소스 강조 기본 색상을 만드는 방법은 무엇입니까?

보통 이런 파일을 캡쳐할 때

여기에 이미지 설명을 입력하세요.

색칠하지 않고는 읽기가 어렵습니다.

나는 cat다음과 같이 소스 강조 표시를 사용했습니다.

cdc() {
  for fn in "$@"; do
    source-highlight --out-format=esc -o STDOUT -i $fn 2>/dev/null || /bin/cat $fn
  done; }; alias cat='cdc'

이제 인식된 파일 확장자(이 경우 .sh)에 대해 다음을 생성합니다.

여기에 이미지 설명을 입력하세요.

그러나 .sh가 없는 경우, 예를 들어 해당 파일을 호출하면 .bash_functions색상 지정이 발생하지 않습니다. 파일 확장자를 알 수 없기 때문입니다.

color-highlight컬러 도트 파일(점으로 시작하는 파일)을 컬러로 얻을 수 있는 방법이 있나요 sh?

그건 그렇고, 이것은 기반으로 만들어졌습니다.알 수 없는 파일 형식을 포함한 고양이 출력을 흑백으로 색상화하는 방법은 무엇입니까?

man source-higlight다음이 표시되지만 어떻게 해야 할지 모르겠습니다.

...
--outlang-def=filename
      output language definition file

--outlang-map=filename
      output language map file (default=`outlang.map')

--data-dir=path
      directory where language definition files and language maps are searched for.   If  not  specified
      these files are searched for in the current directory and in the data dir installation directory

--output-dir=path
      output directory

--lang-def=filename
      language definition file

--lang-map=filename
      language map file  (default=`lang.map')

--show-lang-elements=filename
      prints the language elements that are defined

      in the language definition file

--infer-lang
      force to infer source script language (overriding given language specification)

답변1

-s sh$fn도트 파일처럼 보이는 경우 에만 지정됩니다.

cdc() {
  for fn in "$@"; do
    OPTIONS="-f esc"
    case "${fn##*/}" in
      .*) OPTIONS="$OPTIONS -s sh" ;;
    esac
    source-highlight $OPTIONS -i "$fn" 2>/dev/null || \cat "$fn"
  done
}
alias cat=cdc

에서 추가 사용자 정의 파일 이름 일치 규칙을 추가할 수 있습니다 case.

답변2

야에가시 생각이 맞다, 비록 나는 이렇게 하겠지만:

cdc() {
    for path
    do
        command=(source-highlight --out-format=esc -o STDOUT --failsafe)
        case "${path##*/}" in
            .*) command+=(-s sh)
                ;;
        esac
        "${command[@]}" -i "$path"
    done
}
  • --failsafecat언어를 감지할 수 없는 것처럼 동작합니다 . 모든 오류를 무시하는 것보다 훨씬 낫습니다.
  • 사용하다명령 매개변수 배열

답변3

cdc기능을 다음과 같이 정의하십시오.

cdc() {
    for fn do
        if [[ "${fn##*/}" == .* ]]
        then
            source-highlight --src-lang=sh --out-format=esc -i "$fn"
        else
            source-highlight               --out-format=esc -i "$fn"
        fi 2> /dev/null  ||  /bin/cat "$fn"
    done
}
  • for fn do응 줄임말 for fn in "$@"; do.
  • ${fn##*/}값을 확인 $fn하고 처음부터 마지막 ​​항목까지 모든 항목을 삭제합니다 /. 즉, $fn전체 경로 이름인 경우 이는 파일 이름 부분일 뿐입니다.
  • [[ (the_above) == .* ]]파일 이름이 .*glob/wildcard 패턴과 일치하는지 확인하십시오. 즉, 파일 이름이 다음으로 시작하는지 확인하십시오... 이 사용법은 ==내부적으로만 작동하며 [[ … ]]내부에는 아무런 영향을 미치지 않습니다 [ … ].
  • 따라서 $fn"도트 파일"인 경우 source-highlight해당 --src-lang=sh옵션을 사용하여 실행하세요.

    • 그렇게 하지 않을 타당한 이유가 없고 수행 중인 작업을 확실히 알고 있는 경우가 아니면 항상 쉘 변수 참조를 큰따옴표로 묶어야 합니다. Unix/Linux 파일 이름에는 공백이 포함될 수 있습니다. 이름이 지정된 파일이 있고 그렇게 foo bar말하면 해당 파일의 내용이 표시됩니다 . 그러나 (현재 버전의 함수를 사용하여 ) with 으로 실행한다고 말하면 이름이 지정된 파일을 찾아 일반적으로 문제를 일으킬 것입니다. 그래서 그것은 실패할 것이고 당신의 함수도 시도할 것이고 , 그것도 실패할 것입니다. 사용하면 공백이 포함된 파일 이름에 대해 이 방법이 작동합니다./bin/cat "foo bar"catfoo barcdc "foo bar"cdcsource-highlight-i foo barfoo/bin/cat foo bar"$fn"
    • 프로그램 cp에서는 매개변수 목록에 기록할 파일이나 디렉터리의 이름을 지정해야 합니다. 이는 대부분의 프로그램이 기본적으로 (달리 지정하지 않는 한) 표준 출력에 기록하는 규칙에 대한 몇 가지 예외 중 하나입니다. 그렇게 말할 필요는 없고 -o STDOUT, 프로그램 작성자가 왜 이것을 지정하도록 허용했는지 궁금합니다.

    예, 답변부터 다른 질문까지 모든 내용을 복사했다는 것을 알고 있습니다.

  • 분명히 $fn도트 파일이 아닌 경우 source-highlight일반적인 방법으로 실행하고 확장자를 확인하도록 하십시오.
  • 2> /dev/null는 전체 블록에 대해 수행될 수 있으며 각 분기에 대해 반복될 필요는 없습니다.|| /bin/cat "$fn"if … then … else … fi

잘. 내 버전 source-highlight(3.1.7)에는 옵션(줄여서 yaegashi라고 함)이 있습니다. 방금 귀하의 질문에 포함된 매뉴얼 페이지 발췌에 해당 내용이 없다는 것을 알았습니다. 따라서 귀하의 버전이 해당 옵션을 지원하지 않으면 내 대답은 귀하에게 적합하지 않습니다. (물론 yaegashi도 마찬가지입니다.) 이 경우 버전 3.1.7(또는 호환 버전)을 설치할 수 있는지 확인해야 합니다.--src-lang=LANGUAGE-s LANGUAGEsource-highlightsource-highlightsource-highlight

답변4

파일 확장자를 보는 것 외에도 소스 강조 표시에는 언어를 감지하는 몇 가지 다른 방법이 있습니다. 다음과 같이 쉘 스크립트 파일에 주석을 달 수 있습니다.

  1. shabang 줄: #!/bin/sh또는 #!/bin/bash파일의 첫 번째 줄에 넣습니다.
  2. # -*- shell -*-Emacs 스타일 파일 유형 주석: 파일에 or # -*- bash -*-(첫 번째 줄일 필요는 없음) 과 같은 주석을 추가합니다.

자세히보다입력 언어를 찾는 방법소스 하이라이트 매뉴얼에서.

관련 정보