0

我特别需要调整命令提示符。目前我正在使用Holmans Dotfiles,我想进一步自定义它,以创建一个更具可读性和清晰的提示。下面使用图像描述了我想要的内容,请注意,这些是经过照片处理的,以便看起来像我想要的那样;)。这也是github上的一个问题,内联图片!

假设您有如下图所示的文件结构:

在此处输入图像描述

目前,当我在让我们说 map3 时,我的提示只显示:

图片

我想扩展它,但使用其他样式。目前我所在的当前地图(map3)以青色突出显示。我希望能够看到它的父母,但那些没有以相同颜色突出显示的。请看下图:

图片

据我所知,%3 给出了最后 3 个目录。但是我不知道如何单独设置每个目录的样式。

--------------------------------------- 另一个可选的想法 ------------------- ---------------------

我有的另一个想法,但与上述问题相比,它的重要性次要是基于目录是否是 git 存储库是或否有一个相对提示。(因此,直到 git repo 的根图,dirtree 始终可见)

也就是说map0是git存储库的根,我在map3中,那么我希望我的提示是这样的:

图片

当我像这样在map5中时:

图片

可选地,能够像这样设置 rootgit 映射的样式会很好,例如:

图片

目前我的提示与holmans dotfiles中的相同

4

1 回答 1

3

提示中的多色路径

 directory_name() {
    PROMPT_PATH=""

    CURRENT=`dirname ${PWD}`
    if [[ $CURRENT = / ]]; then
        PROMPT_PATH=""
    elif [[ $PWD = $HOME ]]; then
        PROMPT_PATH=""
    else
        if [[ -d $(git rev-parse --show-toplevel 2>/dev/null) ]]; then
            # We're in a git repo.
            BASE=$(basename $(git rev-parse --show-toplevel))
            if [[ $PWD = $(git rev-parse --show-toplevel) ]]; then
                # We're in the root.
                PROMPT_PATH=""
            else
                # We're not in the root. Display the git repo root.
                GIT_ROOT="%{$fg_bold[magenta]%}${BASE}%{$reset_color%}"

                PATH_TO_CURRENT="${PWD#$(git rev-parse --show-toplevel)}"
                PATH_TO_CURRENT="${PATH_TO_CURRENT%/*}"

                PROMPT_PATH="${GIT_ROOT}${PATH_TO_CURRENT}/"
            fi
        else
            PROMPT_PATH=$(print -P %3~)
            PROMPT_PATH="${PROMPT_PATH%/*}/"
        fi
    fi

    echo "%{$fg_bold[cyan]%}${PROMPT_PATH}%{$reset_color%}%{$fg[red]%}%1~%{$reset_color%}"
}

这将显示 git root 的路径(git root in magenta,除非你在 git root 中,在这种情况下它只会显示当前目录 in red):

修复了一些问题。

可能的改进:

  1. 这显示了 git repo 的根目录magenta,除非您在根目录中,在这种情况下,它是红色的,就像您所在的所有其他目录一样。始终为 git root 着色(即使它是当前目录)可能是不错(目前可能会令人困惑?)。

  2. 如果存在,我会显示相对于 git repo 根目录的路径。另一种选择可能是显示完整路径,为 git repo 的根着色,如下例所示:

    ~/repositories/config-files/zshrc.d
    ^-------------^
       White
                   ^-----------^
                     Magenta
                                ^------^
                                  Red
    
  3. 子模块着色:请注意,在屏幕截图中,路径根被重置为最深的 git repo(所以在子模块中,我们看不到config-files/oh-my-zsh,而只有oh-my-zsh)。我不确定如何检测子模块,但这可能是进一步的改进。

更多详细信息:

有一个相当深入的外观[这是我的笔记]我是如何在这里做这一切的。它还没有最后的接触(git root 和 PWD 之间的路径),但其他一切都在那里。如果您尝试修改它并希望更好地理解它可能会很有用。

于 2013-04-25T12:37:08.453 回答