zsh list-colors语法如何工作?

sal*_*ler 5 zsh zshrc

我正在尝试为完成函数设置列表颜色,但我无法围绕样式语法.

zstyle ':completion:*:tasks:*' list-colors "=(#b) #([^ ]#)*=$color[white]=$color[yellow]=$color[red]"
Run Code Online (Sandbox Code Playgroud)

我所知道的是'#'和'##'是'.'的正则表达式.和'+'.每次我尝试修改语法时,匹配似乎都会破坏.有人可以发布一些简单的例子或资源(不幸的是,zsh文档的例子很少)?例如,我如何匹配字符串' - '?

小智 19

这里有几个例子.

开始时很简单,让所有参数标记为绿色:

zstyle ':completion:*:parameters'  list-colors '=*=32'
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,语法是'= pattern = format'.由于*匹配所有内容,32是ANSI绿色代码,因此所有参数都将为绿色.

现在让我们以粗体红色显示所有命令

zstyle ':completion:*:commands' list-colors '=*=1;31'
Run Code Online (Sandbox Code Playgroud)

但内置命令有一点点复杂的颜色(从256调色板)

zstyle ':completion:*:builtins' list-colors '=*=1;38;5;142'
Run Code Online (Sandbox Code Playgroud)

类似于别名

zstyle ':completion:*:aliases' list-colors '=*=2;38;5;128'
Run Code Online (Sandbox Code Playgroud)

现在让我们去模式,并以不同的方式着色完成的不同部分,比如我们想要3种不同颜色的杀戮过程:

zstyle ':completion:*:*:kill:*' list-colors '=(#b) #([0-9]#)*( *[a-z])*=34=31=33'
Run Code Online (Sandbox Code Playgroud)

这里的语法有点复杂,即'=(#b)(pattern1)(pattern2)= format0 = format1 = format2',其中format0用于与任何模式不匹配的所有内容.因此,进程ID(第一个模式)将为红色,处理名称(第二个模式)为黄色,其余为蓝色:

在此输入图像描述

最后,让我们尝试一些有用的' - '字符串,你要求:

zstyle ':completion:*:options' list-colors '=^(-- *)=34'
Run Code Online (Sandbox Code Playgroud)

这将以蓝色显示所有命令选项,但该选项的描述将保持正常.

在此输入图像描述

请注意,某些选项以' - '开头,因此我们必须使用' - '(带空格)来仅匹配描述,并使用^取消模式以应用选项的颜色.

希望这有帮助