我在 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 文件中),这就是为什么它直接起作用,但对于其他名称则不起作用。