【问题标题】:Command Prompt Directory Styling命令提示符目录样式
【发布时间】:2013-04-15 08:36:30
【问题描述】:

我特别需要调整命令提示符。目前我正在使用Holmans Dotfiles,我想进一步自定义它,以创建一个更易读、更清晰的提示。下面使用图像描述了我想要的内容,请注意,这些是经过照片处理的,以便看起来像我想要的那样;)。 This is also an issue on github, with inline images!

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

目前,当我在 map3 中时,我的提示仅显示:

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

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

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

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

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

当我像这样在 map5 中时:

如果能够像这样设置 rootgit 映射的样式,那就太好了:

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

【问题讨论】:

  • 使用正确的图像嵌入更新了您的帖子。编辑时勾选上方菜单,您有嵌入图片的权限。

标签: git shell command zsh prompt


【解决方案1】:

提示中的多色路径

 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 的路径(magenta 中的 git root,除非你在 git root 中,在这种情况下它只会显示red 中的当前目录):

可能的改进:

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

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

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

更多细节:

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

【讨论】:

  • 感谢您的帮助!那么它是如何低效的呢?可以和gitidea结合吗?
  • @user2307317 将它与git 的想法结合起来几乎肯定是可能的,但我不得不花一点时间考虑一下。给定的答案效率低下,因为我同时使用$PWD%3~ 得到PWD。理想情况下,我只会使用一种方法,但我不确定如何“优化”它。如果您需要更长的答案,详细说明我是如何制作这些功能的,以及它们是如何工作的,我可以添加。当我弄清楚时我会添加git 的东西(我想自己使用它),但这不会是几天。
  • 非常好,到目前为止非常感谢 :) 我会等待您的答复,然后每隔几天左右回来查看! ...也许一个额外的困难是该函数将如何处理子回购(但是现在我提到我不知道我的提示现在如何看待它们(与 holman 相同的提示))
  • 哇,太好了! mmh 几乎可以工作的版本(什么还不能工作呢?)。至于功能:我喜欢在 git repo 中让它成为“根”的想法,无论你在里面有多深,即使只有一层。我认为颜色偏好取决于自己(我喜欢我的蓝色:))。我现在要试试看是否效果很好
  • 啊,我看到它还没有显示 git repo 中的整个相对路径!是的,这是需要注意的事情:)除此之外,我认为它工作得很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
相关资源
最近更新 更多