在`ls`输出中的颜色特定文件名(不是扩展名),如Makefile或CMakeLists.txt


0

我目前正在开发一个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 bash 4.4.12和 ls 8.26。

提前致谢。

Answers:



0

我不知道你是否可以这样做 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文件保持一定程度。但这不是您的问题的答案,可能无法在您的项目结构中......

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.