Makefile 또는 CMakeLists.txt와 같은 `ls` 출력의 색상별 파일 이름(확장자가 아님)

Makefile 또는 CMakeLists.txt와 같은 `ls` 출력의 색상별 파일 이름(확장자가 아님)

저는 현재 C++ 프로젝트를 진행하고 있습니다. 저는 CMake를 빌드 시스템으로 사용하고 있으며 명령 출력 CMakeLists.txt에서 ​​모든 CMake 관련 파일(예: )의 색상을 다르게 지정하고 싶습니다 ls. 이렇게 하면 소스 코드 파일과 쉽게 구별할 수 있습니다.

dircolors나는 env var를 직접 사용하고 편집 하려고했습니다 $LS_COLORS. 저는 두 경우 모두 실패했습니다. 이러한 솔루션은 일부 Linux 특정 파일(예: 링크) 또는 선택한 확장에 색상을 지정하는 방법만 제공하는 것 같습니다.

정리하자면 제가 한 일은 다음과 같습니다.

OLD_LS_COLORS=$LS_COLORS # Backup
export LS_COLORS="${LS_COLORS}CMakeLists.txt=00;36:" # Adding it at the beginning of the list also fails
ls # No colors at all
export LS_COLORS=$OLD_LS_COLORS # Cleanup
dircolors -p > ~/.dir_colors
echo "CMakeLists.txt 01;33" >> ~/.dir_colors
eval `dircolors ~/.dir_colors` # Throws "unrecognized keyword CMakeLists.txt"

내 문제에 대한 해결 방법은 대신 소스 파일( .hxx, .cxx)에 색상을 지정하는 것이지만 CMake 파일에만 색상을 지정하고 싶습니다. 반면에 색상 .txt.cmake파일만 지정할 수 있지만 모든 텍스트 파일은 이러한 방식으로 색상이 지정됩니다.

출력 에서 Makefile(확장자가 없는 파일)을 색칠하는 것은 ls좋은 보너스가 될 것입니다.

bash저는 4.4.12 및 8.26 과 함께 Debian 9를 사용하고 있습니다 ls.

미리 감사드립니다.

답변1

ls로 그렇게 할 수 있습니다.

*Makefile       38;5;155
*CMakeLists.txt 48;5;89;38;5;197;1;3;4;7

보다https://github.com/trapd00r/LS_COLORS/blob/master/LS_COLORS

답변2

직접적 으로 할 수 있는지는 모르겠습니다 ls. (근데 그럴수도...)

ls내 아이디어는 정규식 일치 항목에 색상을 지정할 수 있는 sed로 출력을 파이프하는 것입니다 .

이를 수행하는 멋진 스니펫이 있습니다.https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

모든 cmake 파일과 일치하는 파이프 체인을 작성할 수 있습니다. ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...(그리고 이에 대한 별칭을 만듭니다)

그러나 이것은 물론 해결 방법입니다.

내 개인적인 선택은 소스 외부 빌드를 사용하고 cmake 파일을 어느 정도 분리된 상태로 유지하는 것입니다. 하지만 이는 귀하의 질문에 대한 답변이 아니며 프로젝트 구조에서는 불가능할 수도 있습니다.

관련 정보