2

У меня есть переменная окружения для моей папки проектов, например:

PROJ=$HOME/projects

Когда я хочу открыть папку проекта, я просто набираю PROJ/project_name, и оболочка открывает каталог, и мое приглашение выглядит так:

~PROJ/project_name

Когда я открываю новое окно tmux, оно открывает новую оболочку с подсказкой, показывающей полный путь, например:

~/projects/project_name

Но я хотел, чтобы в приглашении было указано имя переменной.

Как я могу настроить tmux / zsh (я также использую oh-my-zsh), чтобы продолжать использовать переменную окружения при создании новых окон?

1 ответ1

1

Вам необходимо включить параметр AUTO_NAME_DIRS в вашей конфигурации Zsh

setopt autonamedirs

это должно произойти до того, как вы установите PROJ .

В качестве альтернативы, если вам не нужен PROJ для чего-либо, кроме переключения (и отображения) путей в Zsh, вы можете установить

hash -d PROJ=$HOME/project

Объяснение:

Используемая вами функция называется "Статические именованные каталоги". Обычно именованные каталоги нужно вызывать с ~ за которым следует имя параметра оболочки, значение которого начинается с / , PROJ в вашем случае.

Если CDABLE_VARS включен (что Oh-My-Zsh делает по умолчанию), ~ самом деле не требуется. Вот почему вы можете использовать PROJ/project_name вместо ~PROJ/project_name . (но он потерпит неудачу, если существует каталог с фактическим именем PROJ).

Так как Oh-My-Zsh также включает AUTO_CD вам даже не нужно использовать cd . Если команда не может быть выполнена и совпадает с именем каталога, Zsh будет cd в этот каталог.

Со всеми именованными каталогами поиск может происходить в двух направлениях

  1. Указанное имя указывает на каталог (например, содержит ли параметр путь, начинающийся с /)?
  2. у текущего каталога есть имя?

В то время как первый вид поиска происходит автоматически, когда аргумент начинается с ~ (или в некоторых случаях и включает CDABLE_VARS даже без), второй тип (который используется для приглашения) требует, чтобы каталог был указан в хеш-таблице каталога (hash -d для распечатки этой таблицы). На недавно запущенном Zsh эта хеш-таблица обычно пуста. Затем он будет заполнен данными , полученными при выполнении ~ разложения.

В вашей исходной оболочке PROJ был успешно расширен до $HOME/projects поэтому хеш-таблица каталога теперь содержит PROJ=$HOME/projects (где $HOME заменяется вашим фактическим путем к домашнему каталогу). Zsh может теперь искать это для его подсказки. Когда вы запускаете tmux, запускается новая оболочка, и хеш-таблица каталога снова пуста, поэтому имя не заменяется в приглашении.

С AUTO_NAME_DIRS запись в хеш-таблице каталога создается сразу, когда для параметра задано значение, начинающееся с / (или удаляется, если новое значение не начинается с /). Вы также можете добавить вручную в хеш-таблицу каталога с помощью hash -d NAME=PATH .

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