是否可以为特定文件分配ls命令的输出颜色? 我问的原因是对于git存储库,我希望我的跟踪文件与未跟踪的文件具有不同的颜色。所以具体来说,我想得到" git ls-files"的输出。并为这些文件提供某种颜色(或使名称变为粗体或其他)。
答案 0 :(得分:2)
对于标准的ls命令,它非常简单。我们假设您想要以紫色显示所有.mp3文件,然后运行:
$ LS_COLORS=$LS_COLORS:"*mp3=35:"
此外,请确保您的ls命令启用了--color选项。我通常使用类似的东西:
alias ls='ls --color=auto'
紫色是" 35"。其他基本颜色是:
0 = default colour
1 = bold
4 = underlined
5 = flashing text
7 = reverse field
40 = black background
41 = red background
42 = green background
43 = orange background
44 = blue background
45 = purple background
46 = cyan background
47 = grey background
100 = dark grey background
101 = light red background
102 = light green background
103 = yellow background
104 = light blue background
105 = light purple background
106 = turquoise background
答案 1 :(得分:2)
我想要实现与git目录列表完全相同的东西。
我的解决方案是在Z shell(add-zsh-hook chpwd git-alias
)中添加一个钩子,在我更改目录时调用函数git-alias
。
函数git-alias
根据它是否是git目录来定义ll
的功能。
function git-alias {
# Let ll depend on the current directory
if git rev-parse --git-dir > /dev/null 2>&1; then
# Make sure ll has no alias assigned
alias ll='ls' && unalias ll
function ll {
ls $@ -lF|grep --color=never -e '/$' # directories
ls $@ -lQ|grep -f <(git ls-files -cdmoi --exclude-standard)|sed -e "s/\(.*\) \"\(.*\)\"$/\1 ${fg[dgray]}\2 (ignored)$reset_color/" # ignored
ls $@ -l|grep --color=never -f <(git ls-files -c 2>/dev/null) # cached
ls $@ -lQ|grep -f <(git ls-files -m 2>/dev/null)|sed -e "s/\(.*\) \"\(.*\)\"$/\1 ${fg[blue]}✎ \2$reset_color/" # modified
ls $@ -lQ|grep -f <(git ls-files -o --exclude-standard 2>/dev/null)|sed -e "s/\(.*\) \"\(.*\)\"$/\1 ${fg[blue]}★ \2$reset_color/" # new
git ls-files -d 2>/dev/null|sed -e "s/^\(.*\)$/Deleted: ${fg[red]}✗ \1$reset_color/" # deleted
}
else
alias ll='ls -lF'
fi
}
这将返回如下内容:
它仍然不完美(例如,请注意文件'LICENSE'的双重条目以及文件和文件夹的固定顺序),但这是我能做到的最好的。