ZSH 中基于目录深度的颜色文件夹

ZSH 中基于目录深度的颜色文件夹

我目前正在编辑阿格诺斯特主题来自哦我的zsh根据我的喜好,想知道是否有某种方法可以根据深度为状态栏中的目录名称着色。就像是...

~(red)/.config(orange)/oh-my-zsh(yellow)

我最初使用的是电源线从 ubuntu repo 中下载包,但发现它很慢,所以我切换到桀骜主题。使用时电源线我能够做我想做的事,但只能更改当前工作目录的颜色。我的配置是这样的...

"cwd": {"fg": 'color', "bg": 'color', "attrs": []}

"cwd:current_folder": {"fg": 'color', "bg": 'color', "attrs": []}

任何帮助创造这个彩虹怪物的帮助都将不胜感激。我在 Ubuntu 16.04 上使用终结者(如果有的话)。

答案1

您可以创建一个函数来执行此操作。它并不完美,绝对不便携,但似乎可以用。要在中使用它,$PS1您只需更改$fg_and $bg_(使用%F/%B$fg/ $bg,我不记得了)以及 setup 和 precmd hook ( add-zsh-hook precmd function_precmd) 以及您将创建的函数,该函数将修改 中使用的变量$PS1

如需自定义功能,只需正确设置 PRE_ASSOC 即可。

function colorize_array () {
    local reset='\033[0m'

    for (( i = 1; i <= $# ; i++ )); do
        pre=""

        if (( $+PRE_ASSOC[$i] )); then
            pre=$PRE_ASSOC[$i]
        elif (( $+PRE_ASSOC[$(( $i - $# - 1 ))] )) ;then
            pre=$PRE_ASSOC[$(( $i - $# - 1 ))]
        else
            pre=$PRE_ASSOC[default]
        fi
        echo -n -e $pre$@[$i]$reset
    done
}

typeset -A fg_ bg_ 
typeset -A PRE_ASSOC

fg_=([black]="\033[30m" [white]="\033[37m" [red]="\033[31m" [yellow]="\033[33m" [cyan]="\033[36m")
bg_=([black]="\033[40m" [white]="\033[47m" [red]="\033[41m" [yellow]="\033[43m" [cyan]="\033[46m")

PRE_ASSOC=([default]="$fg_[cyan]/" [1]="$fg_[red]"  [-1]="$fg_[yellow]/")

local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})

out=$(colorize_array $pwd_list)
echo $out

该代码远非完美,但它可以工作。

相关内容