在 `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将是一个很好的奖励。

我正在使用带有bash4.4.12 和ls8.26 的 Debian 9。

提前致谢。

答案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 文件分离。但这不是您问题的答案,并且可能在您的项目结构中无法实现...

相关内容