zsh AUTO_NAME_DIRS 对 OSX 上的某些变量名不起作用

zsh AUTO_NAME_DIRS 对 OSX 上的某些变量名不起作用

我在 OSX 10.8 上使用 zsh 时遇到了一个奇怪的问题(使用 oh-my-zsh,我认为它为我设置了 AUTO_NAME_DIRS)。

通常,如果我通过 设置某个路径的环境变量export SOME_VAR=/some/path,然后切换到该路径,我将~SOME_VAR在命令行提示符中看到。这在我的 Ubuntu 13.04 和 zsh 5.0.0 上运行良好。

但是,在我的 OSX 10.8 上,它仅适用于某些变量名。例如,来自我的终端的一些日志:

Last login: Fri Jul 26 10:22:15 on ttys000
sji@MacBook-Air:~% cd dev/test
sji@MacBook-Air:~/dev/test% export QEPY_PATH=`pwd`
sji@MacBook-Air:~/dev/test% export AEPY_PATH=`pwd`
sji@MacBook-Air:~/dev/test% export EEPY_PATH=`pwd`
sji@MacBook-Air:~/dev/test% export AAAAEPY_PATH=`pwd`
sji@MacBook-Air:~/dev/test% export AAAAEPY_PTH=`pwd` 
sji@MacBook-Air:~/dev/test% export AAAAEPY_PBTH=`pwd`
sji@MacBook-Air:~/dev/test% export AAAAEPY_PDTH=`pwd`
sji@MacBook-Air:~/dev/test% export AAAAEPY_PDDH=`pwd`
sji@MacBook-Air:~/dev/test% export AAAAEPY_PDIO=`pwd`
sji@MacBook-Air:~/dev/test% export AAAAEPY_PAT=`pwd` 
sji@MacBook-Air:~/dev/test% export AEPY_PAT=`pwd` 
sji@MacBook-Air:~AEPY_PAT%

除了最后一个之外,其他的都不起作用。一开始我以为是因为 OSX 上的 zsh 太旧了。但是当我通过 MacPorts 将其升级到 5.0.2 后,问题仍然存在。

我努力了一段时间,但仍然找不到哪些变量名是可以接受的,哪些是不可接受的模式。

有人有什么想法吗?谢谢。

答案1

扩展%~用于尝试找到最简洁的方式来表示您的位置,因为提示空间非常宝贵,没有必要说超出需要的内容。

因此在zshexpn(1)本节中静态命名目录解释如何使用引用目录的最短方式,以及打破平局的规则(有利于命名目录)。

由于/dev/test是 9 个字符,并且~是 1 个字符,因此变量名最多可以是 8 个字符,以便规则有利于使用该变量。

答案2

我更惊讶的是~AEPY_PAT提示中立即显示了这一点。据我了解,在第一次使用命名目录之前,您必须对它们使用一次参数扩展(除了: ~name参数扩展之外,它什么也不做,但当然,例如也会发生这种情况cd ~name)。

这是在 Linux 上安装 zsh 5.0.2 的情况:

~/temp> export foo=`pwd`
~/temp> : ~foo
:~foo>

仅当: ~foo命名的目录出现在提示中后。

我认为您~AEPY_PAT之前使用过该会话(例如在您的 rc 文件中),这就是为什么它直接起作用,但对于其他名称则不起作用。

相关内容