Makefile や CMakeLists.txt のような `ls` 出力内の特定のファイル名 (拡張子ではない) を色で指定します。

Makefile や CMakeLists.txt のような `ls` 出力内の特定のファイル名 (拡張子ではない) を色で指定します。

現在、C++ プロジェクトに取り組んでいます。ビルド システムとして CMake を使用していますが、コマンド出力CMakeLists.txtで CMake 関連ファイル (など) をすべて異なる色で表示したいですls。こうすることで、ソース コード ファイルと簡単に区別できます。

dircolors私は環境変数を直接使用して編集しようとしました$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便利なボーナスになります。

私は Debian 9 のbash4.4.12 とls8.26 を使用しています。

前もって感謝します。

答え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。(でもできるかもしれません...)

私のアイデアは、出力をlssed にパイプして、正規表現の一致を色分けできるようにすることです。

これを実行する便利なスニペットがあります:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

すべての cmake ファイルに一致するパイプのチェーンを記述できます: ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...(これにエイリアスを作成します)

しかし、これはもちろん回避策です。

私の個人的な選択は、ソース外のビルドを使用し、cmake ファイルをある程度分離しておくことです。しかし、これはあなたの質問に対する答えではなく、あなたのプロジェクト構造では不可能かもしれません...

関連情報