如何让 zsh 始终显示环境变量名称而不是路径?

如何让 zsh 始终显示环境变量名称而不是路径?

我在项目文件夹中设置了一个环境变量,如下所示:

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进入该目录。

对于所有命名目录,查找可能在两个方向上进行

  1. 给定的名称是否指向目录(例如,参数是否包含以 开头的路径/)?
  2. 当前目录有名字吗?

第一种查找在参数以 开头时自动发生~(或在某些情况下CDABLE_VARS甚至在没有 的情况下启用),而第二种查找(用于提示)要求目录列在目录哈希表中(hash -d用于该表的列表)。在刚开始的扎什这个哈希表通常是空的。它将被扩展时获得的数据填充~

在您的原始 shell 中PROJ已成功扩展到$HOME/projects,因此目录哈希表现在包含PROJ=$HOME/projects(其中$HOME替换为您的实际主目录路径)。扎什现在可以通过提示符查找它。启动 tmux 时,会启动一个新的 shell,目录哈希表再次为空,因此提示符中的名称不会被替换。

当将AUTO_NAME_DIRS参数设置为以 开头的值时,目录哈希表中会立即创建一个条目/(如果新值不以 开头,则会删除该条目/)。您还可以使用 手动将条目添加到目录哈希表中hash -d NAME=PATH

答案2

您需要在 Zsh 配置中启用 AUTO_NAME_DIRS 选项

setopt autonamedirs

https://wikiguide.tips/

相关内容