【发布时间】:2013-03-10 19:43:39
【问题描述】:
tldr:我希望zsh 忽略 rvm 报告系统 ruby,仅在实际使用 rvm 时显示它。
一段时间以来,我一直在使用 zsh 和出色的 oh-my-zsh 扩展。我的提示看起来像这样,oh-my-zsh 中包含 gnzh 主题:
╭─emergent@elysian ~/devel/octopress ‹ruby-1.9.3› ‹source*›
╰─➤
注意‹ruby-1.9.3› ‹source*› - 当然是zsh 主题在做一些事情,以便用rvm 正在使用的版本以及git repo 的当前分支来整理我。
我也一直在尝试使用virtualenvwrapper 插件和a few tweaks within virtualenvwrapper itself in order to avoid it simply prepending (virtualenv) at the start of my $PROMPT 让这个与python 的virtualenv 一起工作。
我喜欢这个,因为它只在我将目录更改为 virtualenv 并激活它时显示一个指示(virtualenvwrapper/zsh 自动为我做)。但是,当我将内容转换为 virtualenv 并且路径名开始变长时,这并不能很好地工作。例如:
╭─emergent@elysian ~PROJECT_HOME/djangotutorial/mysite/polls ‹djangotutorial› ‹system› ‹tu
torial02*›
╰─➤
我的终端只有 88 个字符宽,因此,我的提示主题(包括 virtualenvwrapper、rvm 和 git 信息)分布在 3 行中。
我一直在尝试的解决方案是仅在我实际激活rvm ruby 时才显示rvm 指示符。我发现自己从来没有同时使用这两者,并且在我的每条提示行中附加‹system› 似乎最终是多余的。
这是我尝试修改我的.zsh-theme 以实现此目的:
local rvm_ruby=''
# Tests for existence of RVM
if which rvm-prompt &> /dev/null; then
# !!! THIS IS THE EDIT TO THE THEME I'M ATTEMPTING: !!!
# Tests if it's using the system ruby and only displays when RVM is
# actually being used.
if [ $(rvm-prompt i v g s) != "system" ]; then
rvm_ruby='%{$PR_RED%}‹$(rvm-prompt i v g s)›%{$PR_NO_COLOR%}'
fi
else
if which rbenv &> /dev/null; then
rvm_ruby='%{$PR_RED%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$PR_NO_COLOR%}'
fi
fi
local git_branch='$(git_prompt_info)%{$PR_NO_COLOR%}'
#PROMPT="${user_host} ${current_dir} ${rvm_ruby} ${git_branch}$PR_PROMPT "
PROMPT="╭─${user_host} ${current_dir} ${rvm_ruby} ${git_branch}
╰─$PR_PROMPT "
但是,它根本没有做任何事情 --- 我在此编辑之前和之后看不到任何区别。我确保我是sourceing ~/.zshrc。我在一个较小的脚本中测试了条件评估,它似乎成功了:
if [ $(rvm-prompt i v g s) != "system" ]; then
echo $(rvm-prompt i v g s)
fi
╭─emergent@elysian ~/devel/shellscripts ‹system›
╰─➤ ./test.sh
╭─emergent@elysian ~/devel/shellscripts ‹system›
╰─➤ rvm use ruby-1.9.3
Using /home/emergent/.rvm/gems/ruby-1.9.3-p392
╭─emergent@elysian ~/devel/shellscripts ‹ruby-1.9.3›
╰─➤ ./test.sh
ruby-1.9.3
任何在处理 shell 方面更有经验的人对我在这里可以做得更好有什么想法吗?即使您的建议是告诉我为了提高实用性和生产力而做一些与我现在完全不同的事情,我也很乐意听到它。提前干杯和感谢!
【问题讨论】:
-
您看到的箭头是 oh-my-zsh 附带的,尽管这正是我的 linux 机器上终端的样子。在 OSX 上,我看起来更像这样,因为 OSX 上的终端似乎更好地实现了 unicode。想象一下 ~ 之后的换行符:@Ds-MacBook.local ~ ⤷
-
如果您希望得到解答,我建议您使用 TL;DR。
-
感谢您的建议,我知道这并不是我要说的最简洁的解释。