Zsh强调公共完成前缀

时间:2014-07-31 02:31:36

标签: linux zsh zsh-completion

我已经看过像this zsh.org线程和this Reddit线程这样的内容,它们展示了如何使用颜色突出显示完成的公共前缀。不幸的是,这会覆盖我设置的LS_COLORS。我从我的LS_COLORS中获取了大量信息,如果可能的话,我希望他们一个人待命。相反,我宁愿使用带下划线的公共前缀(留下颜色)。

喜欢这个

Like this, but with an underline instead of a color

但是使用下划线而不是颜色,让LS_COLORS保持原样。

编辑:

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

1 个答案:

答案 0 :(得分: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是完全匹配时,它们仍会被传递。