首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提示符中的.zshrc git分支

提示符中的.zshrc git分支
EN

Stack Overflow用户
提问于 2021-12-01 20:41:17
回答 3查看 92关注 0票数 1

我有一个简单但自定义的.zshrc,我想用我当前所在的git分支来填充提示符(当在git代码库中时)。下面的代码似乎可以工作,但比我实际所在的位置慢了一个提示符。

.zshrc:

代码语言:javascript
复制
#Prompt messing
    # Load colors for prompt
    autoload -U colors && colors
    # Load version control information
    autoload -Uz vcs_info
    precmd() {
        vcs_info
        if [[ -n ${vcs_info_msg_0_} ]]; then
            # allow check for changes
            zstyle ':vcs_info:*' check-for-changes true
            #sets unstaged string to this
            zstyle ':vcs_info:git:*' unstagedstr "!"
            #sets staged string to this
            zstyle ':vcs_info:git:*' stagedstr "+"
            zstyle ':vcs_info:git:*' formats '%K{green}%u%k%K{cyan}%c%k'

            BRANCH=$(command git rev-parse --abbrev-ref HEAD)
            PS1='%F{magenta}%7>>${BRANCH}%<<%f'
            PS1+='${vcs_info_msg_0_} %~; '
        else
            PS1='%~; '
        fi
    }

例如:

代码语言:javascript
复制
master ~/code/external-api; cd ..
master ~/code; 
~/code; 

我希望第二行的提示符中没有master

任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

发布于 2021-12-01 21:31:05

在不厌其烦地启用vcs_info之后,您就得到了自己的git分支实现,其中有两行赋值$BRANCH。不需要在每次运行precmd()时都重复设置vcs_info的zstyle。最好使用psvar%v,而不是依赖PROMPT_SUBST选项。例如:

代码语言:javascript
复制
    PS1='%(V.%v .)%~; '
    autoload -U vcs_info
    zstyle … # all the zstyle commands from before
    precmd() {
      vcs_info
      psvar[1]="${vcs_info_msg_0_}"
    }

我也不会为colors函数费心。只需使用%F{majenta}就可以了。它是许多年前的遗留问题,在zsh获得直接支持之前,它只是使用文字转义序列设置变量。

票数 3
EN

Stack Overflow用户

发布于 2021-12-01 21:19:46

根据this page的说法,你可以用vcs_info做到这一点。

代码语言:javascript
复制
# in your ~/.zshrc
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
precmd() {
    vcs_info
}

# Prompt setup
setopt prompt_subst
PROMPT='${vcs_info_msg_0_}%# '

# Format the message
zstyle ':vcs_info:git*' formats "%{$fg[grey]%}%s %{$reset_color%}%r/%S%{$fg[grey]%} %{$fg[blue]%}%b%{$reset_color%}%m%u%c%{$reset_color%} "
票数 1
EN

Stack Overflow用户

发布于 2021-12-01 22:38:00

要解决“one prompt this”问题,请尝试在声明函数后将其添加到~/.zshrc中:

代码语言:javascript
复制
autoload -Uz add-zsh-hook
add-zsh-hook precmd precmd

直到将precmd函数设置为precmd函数,它才是precmd函数:)。许多人安装了oh-my-zsh,并通过这种方式获得了precmd钩子集,因此这部分并不总是文档化的。

为了避免混淆,通常最好对函数使用不同的名称:

代码语言:javascript
复制
function my_precmd {
  vcs_info
  ...
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd my_precmd
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70190952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档