![在 `ls` 输出中为特定文件名(不是扩展名)添加颜色,例如 Makefile 或 CMakeLists.txt](https://linux22.com/image/1567463/%E5%9C%A8%20%60ls%60%20%E8%BE%93%E5%87%BA%E4%B8%AD%E4%B8%BA%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E5%90%8D%EF%BC%88%E4%B8%8D%E6%98%AF%E6%89%A9%E5%B1%95%E5%90%8D%EF%BC%89%E6%B7%BB%E5%8A%A0%E9%A2%9C%E8%89%B2%EF%BC%8C%E4%BE%8B%E5%A6%82%20Makefile%20%E6%88%96%20CMakeLists.txt.png)
我目前正在开发一个 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
将是一个很好的奖励。
我正在使用带有bash
4.4.12 和ls
8.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 文件分离。但这不是您问题的答案,并且可能在您的项目结构中无法实现...