1

У меня странная проблема с моим zsh на моем OSX 10.8 (с 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%

Все, кроме последнего, не работали на меня. Сначала я думал, что это потому, что zsh на OSX слишком стар. Но проблема все еще сохраняется после того, как я обновил его до 5.0.2 через MacPorts.

Некоторое время я боролся, но все еще не мог найти образец того, какие имена переменных приемлемы, а какие нет.

У кого-нибудь есть идеи? Благодарю.

2 ответа2

3

Расширение %~ используется для того, чтобы попытаться найти наиболее краткий способ представления вашего местоположения, поскольку пространство подсказок является ценным, и нет смысла говорить больше, чем необходимо.

Таким образом, в zshexpn(1) раздел Статические именованные каталоги объясняет, как используется кратчайший способ ссылки на каталог, и правила разрыва связей (в пользу именованных директорий).

Поскольку /dev/test - это 9 символов, а ~ - 1 символ, имя вашей переменной может содержать не более 8 символов, чтобы правила предпочитали использовать эту переменную.

0

Меня больше удивляет, что ~AEPY_PAT немедленно отображается в приглашении. Насколько я понимаю, вы должны были использовать расширение аргумента один раз для именованных директорий (с : ~name который ничего не делает, кроме расширения аргумента, но это, конечно, происходит и с, например, cd ~name) до их первого использования.

Это в Linux с zsh 5.0.2:

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

Только после : ~foo названный dir появляется в приглашении.

Я полагаю, что вы использовали ~AEPY_PAT ранее в этом сеансе (например, в ваших rc-файлах), и именно поэтому это работает напрямую, но не для других имен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .