3

我见过像这个zsh.org 线程和这个Reddit 线程这样的东西,它们展示了如何用颜色突出显示完成的公共前缀。不幸的是,这覆盖了LS_COLORS我设置的。我从我那里获得了很多信息,LS_COLORS如果可能的话,我希望他们不要管。相反,我宁愿使用带下划线的公共前缀(保留颜色)。

像这样

像这样,但用下划线而不是颜色

但是用下划线代替颜色,让我LS_COLORS完好无损。

编辑:

我有一个可能的解决方案,但它需要能够list-colors为不同的标签(不是组)指定不同的。我们将每种类型的文件(符号链接、管道等)放入它自己的标签中,并有一个包含所有文件的组。

4

1 回答 1

0

带有警告的解决方案:

ls_colors_parsed=${${(@s.:.)LS_COLORS}/(#m)\**=[0-9;]#/${${MATCH/(#m)[0-9;]##/$MATCH=$MATCH=04;$MATCH}/\*/'(*files|*directories)=(#b)($PREFIX:t)(?)*'}}

function _list_colors () {
  local MATCH
  reply=("${(e@s/ /)ls_colors_parsed}")

  # fallback to a catch-all
  reply+=("=(#b)($PREFIX:t)(?)*===04")
}

zstyle -e ':completion:*:default' list-colors _list_colors

这在慢速机器上可能会变慢,并且它仅适用于文件模式匹配,而不适用于文件类型(目录、FIFO 等)匹配。但是,当没有 PREFIX 或 PREFIX 是完全匹配时,这些仍然会通过。

于 2014-11-04T21:32:24.793 回答