rvm - zsh中rbenv版本显示右键提示不刷新

标签 rvm zsh rbenv zshrc

我的 .zshrc 中有以下代码:

local ruby_version=''
if which rvm-prompt &> /dev/null; then
  ruby_version="$(rvm-prompt i v g)"
else
  if which rbenv &> /dev/null; then
    ruby_version="$(rbenv version | sed -e "s/ (set.*$//")"
  fi
fi

我的 RPS1 提示符中有以下代码:

RPS1='${PR_GREEN}$(virtualenv_info)%{$reset_color%} ${PR_RED}${ruby_version}%{$reset_color%}'

(为了简洁起见,我没有显示设置 PR_ 颜色或确定虚拟环境的代码 - 这两者都有效。)

创建新 shell 时(iTerm2 中的新窗口或新选项卡),Ruby 信息是正确的。但是,如果我切换到使用不同 Ruby 的项目(由 .ruby-version 文件确定),则右侧提示中显示的 Ruby 信息不会刷新。如果我重新获取我的 .zshrc 文件,右侧提示符会刷新。

我需要将确定 Ruby 版本的代码封装在函数中吗?顺便说一下,我的 .zshrc 中也有 setopt PromptSubst

当我更改目录时,我错过了什么导致右侧提示无法刷新?

最佳答案

您不应该使用此代码

local ruby_version=''
if which rvm-prompt &> /dev/null; then
  ruby_version="$(rvm-prompt i v g)"
else
  if which rbenv &> /dev/null; then
    ruby_version="$(rbenv version | sed -e "s/ (set.*$//")"
  fi
fi

直接在zshrc中:切换到另一个项目时不会更新ruby_version变量。您可以将其更改为

function ruby_version()
{
    if which rvm-prompt &> /dev/null; then
      rvm-prompt i v g
    else
      if which rbenv &> /dev/null; then
        rbenv version | sed -e "s/ (set.*$//"
      fi
    fi
}

并将提示中的 ${ruby_version} 更改为 $(ruby_version)。或者,如果您确定不需要在每个提示上检查此项(这会减慢速度),您可以使用

function _update_ruby_version()
{
    typeset -g ruby_version=''
    if which rvm-prompt &> /dev/null; then
      ruby_version="$(rvm-prompt i v g)"
      rvm-prompt i v g
    else
      if which rbenv &> /dev/null; then
        ruby_version="$(rbenv version | sed -e "s/ (set.*$//")"
      fi
    fi
}
chpwd_functions+=(_update_ruby_version)

,仅当您更改当前目录时才会更新 ruby​​_version。另请注意,您的代码具有误导性:直接放入 zshrc 的 local ruby​​_version='' 相当于 typeset -g ruby​​_version='' 或只是简单的 ruby_version ='' 定义全局变量,但不定义导出变量。 zsh 中没有文件局部变量(实际表示函数的自动加载文件除外)。

关于rvm - zsh中rbenv版本显示右键提示不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635206/

相关文章:

rvm - 我如何与 Chef 一起使用 `bundle install`?

mysql - RVM 与 Mysql

linux - 如何在 Mac 上添加 apt-repository ppa

ruby - rbenv 没有显示可用的 ruby​​ 版本

ruby - 在 Ubuntu 14.04 上使用 RVM 安装 Ruby 2.2.2 时出错

ruby - 尝试使用 RVM 安装 Ruby 时运行 '__rvm_make -j8' 时出错

bash - 为什么 ZSH 卡在空重定向上?

vi - vi 模式下向后搜索

Rbenv:安装ruby时如何有两个或多个RUBY_CONFIGURE_OPTS?

ruby-on-rails - 在 Ubuntu 上将 rbenv 的 ruby​​ 制作为系统 ruby​​(启动时使用 rbenv 的 ruby​​)