zsh:如何更改Mac终端中所有不可见文件名的颜色?

zsh:如何更改Mac终端中所有不可见文件名的颜色?

我正在使用 Mac Silicon 和文图拉苹果系统。在终端应用程序中,所有文件名都具有相同的颜色。请注意,默认 shell 是桀骜在文图拉,这是我想使用的。目前,我的.zshrc配置文件具有以下内容(因此目录在终端中都以某种颜色显示。我不想更改此内容):

 PROMPT='%U%B%F{red}%n%u: ~%f%b'
 alias ls="ls -G"
 alias ll="ls -lG"

-GBSD 中的选项(ls也在 macOS 上使用)打开彩色输出。

我想在其中添加一些内容来更改用于显示隐藏文件(名称以 a 开头的文件.)的颜色,当使用这样ls的选项时-A会显示它们。我希望所有隐藏文件(但不是目录)在终端中以鲜艳的红色显示(例如洋红色)。请注意,我是终端命令的菜鸟(我只知道一些基本的 Unix 命令),所以我需要一些简单的东西,没有花哨的技巧。

那么我应该怎么做呢?我应该将哪些命令添加到上面的 .zshrc 文件中?

答案1

ls命令是唯一对其打印内容的外观负责的。ls运行时,zsh只需等待ls退出即可。 (不同的颜色zsh选项涉及zsh打印内容)。

在 MacOS 上,设置不同颜色的方法ls如下:https://www.cyberciti.biz/faq/apple-mac-osx-terminal-color-ls-output-option/请参阅“了解 LSCOLORS 值”(man ls还显示如何处理颜色)。

不幸的是,您无法处理文件/目录名称,但只有文件类型(目录、套接字、符号链接等)会根据您提供的调色板更改颜色。

一种解决方案是使用其他ls命令,但 GNU 中的命令似乎不处理.*模式(关于颜色处理)。仅有的*.extension。类似的东西LS_COLORS='.*=01;33' ls -a表示无法识别的前缀。 (根据http://www.bigsoft.co.uk/blog/2008/04/11/configuring-ls_colors

答案2

请注意,虽然 GNUls着色只能基于文件元数据或固定后缀完成($LS_COLORS通常通过实用程序的帮助进行设置),dircolorszsh补全着色可配置基于任何模式。

ls通过.$LS_COLORS=pattern=attributes所以:

# set LS_COLORS for GNU ls
eval "$(dircolors)"

# use same colouring for completions, but also specify magenta for hidden files
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} '=.*=35'

或者,如果您没有 GNUlsdircolors,只需:

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

(其余部分使用与 GNU 类似的默认颜色ls)。

这是使用更现代的列表颜色 zstyle,但语法与 ) 相同$ZLS_COLORS

然后假设您已通过compinstall或手动启用了彩色补全,您将看到洋红色的隐藏文件。

您可能还需要启用globdotsakadotglob选项(它会影响所有 glob 扩展),或者添加:

zstyle ':completion:*' file-patterns '*(D)'

默认情况下,隐藏文件包含在完成列表中。

至少~/.zshrc要测试如下:

zstyle ':completion:*' menu select=2
zstyle ':completion:*:default' list-colors '=.*=35'
zstyle ':completion:*' file-patterns '*(D)'
autoload -Uz compinit
compinit -i

但同样,最好是根据compinstall您的口味调整完成系统,并分别添加这两个list-colorsfile-patterns样式。

无论如何,这仅适用于 zsh 完成列表,不会影响ls输出。

相关内容