Terminal 带有目录和虚拟环境的Zsh提示符

Terminal 带有目录和虚拟环境的Zsh提示符,terminal,zsh,oh-my-zsh,Terminal,Zsh,Oh My Zsh,我很难找到一个简洁的答案。我使用的是Oh My Zsh,现在使用的是默认主题robbyrussell 我希望提示符包含两个组件: 当前目录,再加上一级 如果我使用的是虚拟环境(如anaconda),请将活动环境的名称放在括号中 下面是方法,你可以根据需要定制 #添加背景和前景颜色的辅助方法 提示_段(){ 本地bg fg [[-n$1]]&&bg=“%K{$1}”| bg=“%K” [[-n$2]]&&fg=“%F{$2}”|fg=“%F” 如果[[$CURRENT\u BG!='NONE'&&

我很难找到一个简洁的答案。我使用的是Oh My Zsh,现在使用的是默认主题robbyrussell

我希望提示符包含两个组件:

  • 当前目录,再加上一级
  • 如果我使用的是虚拟环境(如anaconda),请将活动环境的名称放在括号中

  • 下面是方法,你可以根据需要定制

    #添加背景和前景颜色的辅助方法
    提示_段(){
    本地bg fg
    [[-n$1]]&&bg=“%K{$1}”| bg=“%K”
    [[-n$2]]&&fg=“%F{$2}”|fg=“%F”
    如果[[$CURRENT\u BG!='NONE'&&$1!=$CURRENT\u BG]]
    然后
    echo-n“%{$bg%F{$CURRENT_bg}%}$SEGMENT_SEPARATOR%{$fg%}”
    其他的
    echo-n“%{$bg%}%{$fg%}”
    fi
    当前成本=1美元
    [[-n$3]]和&echo-n$3
    }
    提示\u virtualenv(){
    #检查我们是否处于虚拟环境中
    #如果是,则将设置虚拟_ENV变量
    本地虚拟路径=“$VIRTUAL\u ENV”
    如果[-n$virtualenv_路径&&n$virtualenv_禁用_提示]]
    然后
    #我们在虚拟环境中,所以只显示项目名称
    提示“\u段蓝黑”(`basename$virtualenv\u路径`)
    fi
    }
    prompt_目录(){
    #显示当前目录
    提示\u段红蓝$PWD
    }
    生成我的zsh提示符(){
    #调用所有提示函数以生成实际的提示
    即时虚拟
    提示目录
    提示\u段黑白“”
    }
    #为PROMPT变量分配函数,以便bash每次都调用它
    #单引号在这里很重要,否则您将得到一个固定的提示
    #如果没有单引号,函数将被调用一次并计算值
    #将被分配
    提示符=“$(生成我的zsh提示符)”
    
    PROMPT
    变量由
    zsh
    shell使用,以确定需要作为提示显示的内容。当我们设置
    PROMPT=$(build\u my\u zsh\u PROMPT)
    时,我们要求shell调用我们的函数
    build\u my\u zsh\u PROMPT

    这个函数反过来(理想情况下)应该调用创建提示符各个部分的不同函数。现在让我们看看
    prompt\u目录

    prompt_段黑红色$PWD”
    
    prompt_段
    是一个辅助函数,用于回显带有背景和前景色的文本

    第一个参数
    黑色
    是背景,第二个参数
    红色
    是本例中的前景色。接下来,我们将显示此提示需要给出的文本


    所有这些都需要添加到您的
    ~/.zshrc
    文件的最后

    下面是实现方法,您可以根据需要进行自定义

    #添加背景和前景颜色的辅助方法
    提示_段(){
    本地bg fg
    [[-n$1]]&&bg=“%K{$1}”| bg=“%K”
    [[-n$2]]&&fg=“%F{$2}”|fg=“%F”
    如果[[$CURRENT\u BG!='NONE'&&$1!=$CURRENT\u BG]]
    然后
    echo-n“%{$bg%F{$CURRENT_bg}%}$SEGMENT_SEPARATOR%{$fg%}”
    其他的
    echo-n“%{$bg%}%{$fg%}”
    fi
    当前成本=1美元
    [[-n$3]]和&echo-n$3
    }
    提示\u virtualenv(){
    #检查我们是否处于虚拟环境中
    #如果是,则将设置虚拟_ENV变量
    本地虚拟路径=“$VIRTUAL\u ENV”
    如果[-n$virtualenv_路径&&n$virtualenv_禁用_提示]]
    然后
    #我们在虚拟环境中,所以只显示项目名称
    提示“\u段蓝黑”(`basename$virtualenv\u路径`)
    fi
    }
    prompt_目录(){
    #显示当前目录
    提示\u段红蓝$PWD
    }
    生成我的zsh提示符(){
    #调用所有提示函数以生成实际的提示
    即时虚拟
    提示目录
    提示\u段黑白“”
    }
    #为PROMPT变量分配函数,以便bash每次都调用它
    #单引号在这里很重要,否则您将得到一个固定的提示
    #如果没有单引号,函数将被调用一次并计算值
    #将被分配
    提示符=“$(生成我的zsh提示符)”
    
    PROMPT
    变量由
    zsh
    shell用于确定需要显示哪些提示。当我们设置
    PROMPT=$(build\u my\u zsh\u PROMPT)
    时,我们要求shell调用我们的函数
    build\u my\u zsh\u PROMPT

    这个函数反过来(理想情况下)应该调用不同的函数来创建提示符的各个部分

    prompt_段黑红色$PWD”
    
    prompt_段
    是一个辅助函数,用于回显带有背景和前景色的文本

    第一个参数
    黑色
    是背景,第二个参数
    红色
    是本例中的前景色。接下来,我们将显示需要为该提示提供哪些文本


    所有这些都需要添加到您的
    ~/.zshrc
    文件末尾

    您能添加注释以便我了解这里发生了什么吗?还有,我应该把这个放在什么文件里?@Adam_G更新了答案,提供了更多细节。请现在检查谢谢!明天早上我会试试的!这会引发以下错误:
    prompt\u parent\u directory:1:找不到命令:prompt\u segment prompt\u directory:1:找不到命令:prompt\u segment build\u my\u zsh\u prompt:4:找不到命令:prompt\u segment
    ,这很有意义。提示_segment()应该说什么?好的,这就引出了另一个问题。我无法在终端中得到提示,只是上面的错误。我如何编辑该文件?请您添加评论,以便我了解这里发生了什么?还有,我应该把这个放在什么文件里?@Adam_G更新了答案,提供了更多细节。请现在检查谢谢!明天早上我会试试的!这会引发以下错误:
    prompt\u parent\u directory:1:找不到命令:prompt\u segment prompt\u directory:1:找不到命令:prompt\u segment build\u my\u zsh\u prompt:4:找不到命令:prompt\u segment
    ,这很有意义。应该提示什么