4

virtualenvwrapper我使用调用创建了一个 virtualenv augpy。当我键入workon augpy时,它工作正常并正确激活。但是,当我尝试workon单独使用列出 virtualenvs 时,我得到一个奇怪的输出:

$ workon
]7;file://new-host.home/Users/Me/.virtualenvsaugpy

我不知道这是为什么 - 也许它对我正在使用的外壳感到困惑?我目前使用 zsh (5.0.2, OSX 10.8) plusoh-my-zsh作为我的默认 shell。当我输入workonbash,我得到了正确的结果(并且自动完成也有效):

$workon
augpy

我应该为 zsh 设置什么特定的东西吗?

4

2 回答 2

2

恐怕这是部分答案。

您看到的问题与 oh-my-zsh 无关。该问题是在 539 行介绍的virtualenvwrapper.sh

在 zsh 中调用的子shell 返回它们在 STDOUT 上的最后一个工作目录,并用控制字符包裹。这很容易验证:

(cd /) | cat -v

我在任何地方都找不到此功能的文档。也许它是最近引入的,比如在 zsh 5.0 中?

在函数 in 中fmt调用的命令使返回的路径可见,从而搞砸了输出。virtualenvwrapper_show_workon_options()virtualenvwrapper.sh

更新:

在下面 evadeflow 的评论的提示下,我做了一些进一步的挖掘,发现实际问题在于我更改 OS X 终端代理图标的方式。事实上,事实证明 oh-my-zsh 使用完全相同的方法。在撰写本文时,我已在 GitHub 上提交了一个拉取请求,以在 oh-my-zsh 中修复此问题。

于 2013-11-18T14:39:56.897 回答
0

这也可以通过向 STDERR 而不是 STDOUT 发出控制字符保护路径来解决。

在之前链接的 macworld 提示中,这需要将命令更改printf '\e]7;%s\a' "$PWD_URL"printf '\e]7;%s\a' "$PWD_URL" 1>&2.

于 2014-02-24T20:53:08.013 回答