我正在尝试获取晒过的在我的终端中使用的颜色主题。我阅读了说明这里但我收到以下 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
来自我的.zshrc
zsh (最新版本)(我ssh -X
从gnome-terminal
Ubuntu 中远程访问)。
有问题的文件的路径.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
跟这个关系不大zsh
。zsh
像 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 实用程序套件,包括ls
和dircolors
)。只需删除该文件中不支持的行即可。