我目前正在從事一個 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.12bash
和ls
8.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 檔案分開。但這不是您問題的答案,並且在您的專案結構中可能不可能...