zsh 上的 dircolors:无法识别的关键字:MULTIHARDLINK、RESET 和 CAPABILITY

zsh 上的 dircolors:无法识别的关键字:MULTIHARDLINK、RESET 和 CAPABILITY

我正在尝试获取晒过的在我的终端中使用的颜色主题。我阅读了说明这里但我收到以下 dircolors 错误:

dircolors: `/home/avazquez/.dircolors_zsh':90: unrecognized keyword RESET
dircolors: `/home/avazquez/.dircolors_zsh':94: unrecognized keyword MULTIHARDLINK
dircolors: `/home/avazquez/.dircolors_zsh':103: unrecognized keyword CAPABILITY

运行时:

if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi

来自我的.zshrczsh (最新版本)(我ssh -Xgnome-terminalUbuntu 中远程访问)。

有问题的文件的路径.dircolors这里令人不安的行似乎是一些特殊的文件定义:

## Special files

NORMAL 00;38;5;244 # no color code at all
#FILE 00 # regular file: use no color at all
RESET 0 # reset to "normal" color
DIR 00;38;5;33 # directory 01;34
LINK 01;38;5;37 # symbolic link. (If you set this to 'target' instead of a
 # numerical value, the color is as for the file pointed to.)
MULTIHARDLINK 00 # regular file with more than one link
FIFO 48;5;230;38;5;136;01 # pipe
SOCK 48;5;230;38;5;136;01 # socket
DOOR 48;5;230;38;5;136;01 # door
BLK 48;5;230;38;5;244;01 # block device driver
CHR 48;5;230;38;5;244;01 # character device driver
ORPHAN 48;5;235;38;5;160 # symlink to nonexistent file, or non-stat'able file
SETUID 48;5;160;38;5;230 # file that is setuid (u+s)
SETGID 48;5;136;38;5;230 # file that is setgid (g+s)
CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 48;5;64;38;5;230 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 48;5;235;38;5;33 # dir that is other-writable (o+w) and not sticky
STICKY 48;5;33;38;5;230 # dir with the sticky bit set (+t) and not other-writable
# This is for files with execute permission:
EXEC 01;38;5;64

答案1

跟这个关系不大zshzsh像 GNU 一样支持彩色补全ls(例如蓝色的对于目录,绿色的对于可执行文件...),并且它支持与 GNU 相同的配置指令ls

GNUls颜色配置是通过LS_COLORS环境变量完成的。当该变量包含 时ln=01;36,这意味着符号链接将呈现在粗青色36前景青色是 ANSI 颜色代码,并且01是粗体)。

在 中zsh,您可以执行相同的操作:

zstyle ':completion:*' list-colors 'ln=01;36'

实际上,您通常zsh使用以下方式配置颜色完成:

zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

因此zsh颜色补全的方式与 GNU ls 相同。

为了更容易地写入变量的内容LS_COLORS,GNUls附带了该dircolors命令。该命令将包含更详细内容的配置文件作为输入(因为配置文件没有像环境变量那样的空间限制),并生成LS_COLORS适合您的终端的变量的相应内容。

上面我们有:

LINK 01;38;5;37

01仍然是粗体,但它是支持 88 或 256 色38;5;37的终端的扩展颜色模式的规范。xterm

这是前景色 37,它是rgb:00/af/af比 ANSI 颜色 6 的默认颜色稍深的青色 ( ) 色调(cyan3至少对于我的xterm,这里是rgb:00/cd/cd)。

~$ tput setaf 37 | sed l
\033[38;5;37m$

过了之后dircolors就变成了ln=38;5;37

还有MULTIHARDLINK 00一则规定,具有多个硬链接的文件将以默认颜色呈现。这将翻译为mh=00$LS_COLORS.

ls但是,这是在/的相对较新版本中引入的dircolors。它曾经是HARDLINK/ hl,但在 2009 年的 coreutils 7.5 中被重命名为MULTIHARDLINK/ ,mh因为这是更正确的措辞选择。

您似乎使用的是较旧版本的dircolors.请注意,zsh既不支持hl也不mh支持(尽管它不会抱怨,只是忽略它),并且因为它只是设置为默认颜色,所以您也可以删除该行。

RESET/rs是在 coreutils 6.11 中添加的,两者都不支持zsh

CAPABILITY/ca是在 coreutils 7.0 中添加的,两者都不支持zsh

可能还有更多不支持的内容zsh(请参阅info zsh 'The zsh/complist Module'详细信息),但同样,zsh只是忽略它不支持的内容。

您在那里得到的错误来自dircolors.这只是意味着编写该dircolors文件的人拥有比您更新版本的 coreutils(GNU 实用程序套件,包括lsdircolors)。只需删除该文件中不支持的行即可。

答案2

为了zsh工作,您必须添加:

alias ls='ls --color=auto'

我在 github 上也有一些东西.zshrc例子

相关内容