我在项目文件夹中设置了一个环境变量,如下所示:
PROJ=$HOME/projects
当我想打开一个项目文件夹时,我只需输入 PROJ/project_name,shell 就会打开该目录,我的提示符如下所示:
~PROJ/project_name
当我打开一个新的 tmux 窗口时,它会打开一个新的 shell,提示符显示完整路径,如下所示:
~/projects/project_name
但我希望它在提示中保留变量名称。
如何配置 tmux / zsh(我也使用 oh-my-zsh)以在创建新窗口时继续使用环境变量?
答案1
您需要AUTO_NAME_DIRS
在您的扎什配置
setopt autonamedirs
它必须在你设置之前发生PROJ
。
或者,如果你不需要PROJ
除了切换(和显示)路径之外的任何东西扎什,您可以设置
hash -d PROJ=$HOME/project
解释:
您使用的功能称为“静态命名目录”。通常,命名目录需要用 来调用,~
后跟 shell 参数的名称,该参数的值以/
,开头PROJ
(在您的情况下)。
如果CDABLE_VARS
启用(噢我的天啊默认情况下会执行此操作)~
实际上并非必需。这就是为什么您可以使用PROJ/project_name
而不是~PROJ/project_name
。(但如果存在实际名称为 的目录,则会失败PROJ
)。
作为噢我的天啊还使AUTO_CD
您甚至不需要使用cd
。如果命令无法执行并且与目录名称匹配,扎什将cd
进入该目录。
对于所有命名目录,查找可能在两个方向上进行
- 给定的名称是否指向目录(例如,参数是否包含以 开头的路径
/
)? - 当前目录有名字吗?
第一种查找在参数以 开头时自动发生~
(或在某些情况下CDABLE_VARS
甚至在没有 的情况下启用),而第二种查找(用于提示)要求目录列在目录哈希表中(hash -d
用于该表的列表)。在刚开始的扎什这个哈希表通常是空的。它将被扩展时获得的数据填充~
。
在您的原始 shell 中PROJ
已成功扩展到$HOME/projects
,因此目录哈希表现在包含PROJ=$HOME/projects
(其中$HOME
替换为您的实际主目录路径)。扎什现在可以通过提示符查找它。启动 tmux 时,会启动一个新的 shell,目录哈希表再次为空,因此提示符中的名称不会被替换。
当将AUTO_NAME_DIRS
参数设置为以 开头的值时,目录哈希表中会立即创建一个条目/
(如果新值不以 开头,则会删除该条目/
)。您还可以使用 手动将条目添加到目录哈希表中hash -d NAME=PATH
。