答案1
这是由ls
, not完成的着色zsh
(尽管zsh
可以像 GNUls
在其完成列表中那样配置为文件着色)。
ls
这里,绿色背景和蓝色前景是你在 GNU 的默认配置中获得的颜色--color
(不是 FreeBSD ls
,这应该是/bin/sh
macos 的),用于没有粘性位并且可通过以下方式写入的目录其他的(比所有者和组所有者)。
如果某个目录具有这些权限,通常意味着存在问题。实在是太宽松了。因此,如果您看到令人讨厌的颜色,这是一件好事,因为这会阻碍您修复它。
dircolors -p
显示默认配置:
$ dircolors -p | grep -w -e 34 -e 42
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
DIR 01;34 # directory
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
(在 ANSI 着色转义序列中,34 是前景蓝色的代码,42 是背景绿色的代码)。
STICKY_OTHER_WRITABLE(绿底黑字)将匹配世界可写目录,例如/tmp
.但这些并不像 OTHER_WRITABLE 那么糟糕,因为至少用户(目录所有者除外)无法删除/重命名他们不拥有的文件。
要更改这些默认值,您可以将该输出重定向dircolors -p
到某个文件:
dircolors -p > ~/.config/dircolors
根据您的喜好进行编辑。例如,将 OTHER_WRITABLE 更改为更令人震惊和难以忍受的内容:
OTHER_WRITABLE 5;48;5;210;38;5;47 # some shade of green on some shade of pink
# background and blinking to urge users
# to fix the permissions
(这里使用通常由支持 256 调色板的终端识别的转义序列;现在许多终端忽略了最初的 5 个闪烁,因为它太烦人了)。
您将添加到您的~/.zshrc
:
eval "$(dircolors -b ~/.config/dircolors)"
对于要加载到$LS_COLORS
环境变量中的这些设置,它OTHER_WRITABLE 5;48;5;210;38;5;47
会显示为ow=48;5;210;38;5;47
.
为了zsh
在其完成中显示相同的颜色,您至少需要(在上面的行之后~/.zshrc
):
autoload -Uz compinit
compinit
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
尽管您可能希望通过 进行适当的调整compinstall
,但浏览菜单将引导您:
3. Styles for changing the way completions are displayed and inserted.
➡️
3. Configure coloured/highlighted completion lists, selection of items
and scrolling.
➡️
1. Use coloured lists for listing completions.
➡️
1. Using the default colours.
2. Using the colours already set up for GNU ls via the $LS_COLORS
environment variable. Note this must be set before the completion
configuration code is executed.
3. Turn colouring off.
选择 3 ➡️ 3 ➡️ 1 ➡️ 3 会将zstyle
上面的行添加到您的~/.zshrc
.
答案2
有同样的问题。
首先ls
使用 来检查你的真实情况which ls
,在我的例子中,它的别名是 be gls --color=tty
,这不是我自己设置的,而是 zsh 或 ohmyzsh
只需unalias ls
删除背景颜色
如果你想保留文本前景色,只需别名ls
或ls -G
其他