在 `ls` 輸出中為特定檔案名稱(不是副檔名)著色,如 Makefile 或 CMakeLists.txt

在 `ls` 輸出中為特定檔案名稱(不是副檔名)著色,如 Makefile 或 CMakeLists.txt

我目前正在從事一個 C++ 專案。我使用 CMake 作為建置系統,我希望所有 CMake 相關檔案(如CMakeLists.txt)在命令輸出中具有不同的顏色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、4.4.12bashls8.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直接這樣做。 (但也有可能是…)

我的想法是,將 sed 的輸出透過管道傳輸ls,它可以為正規表示式匹配項著色。

有一個很好的片段可以做到這一點:https://github.com/kepkin/dev-shell-essentials/blob/master/highlight.sh

您可以編寫與所有 cmake 檔案相符的管道鏈:( ls | highlight blue CMakeLists.txt | highlight blue foobar.baz ...並為此建立別名)

但這當然是一種解決方法。

我個人的選擇是使用來源外建置並在一定程度上將 cmake 檔案分開。但這不是您問題的答案,並且在您的專案結構中可能不可能...

相關內容