如何在$XDG\u CONFIG\u HOME中进行zsh搜索配置

如何在$XDG\u CONFIG\u HOME中进行zsh搜索配置,zsh,zshrc,Zsh,Zshrc,为了使我的~变得更干净,我想将尽可能多的用户配置文件移动到$XDG\u CONFIG\u HOME,默认情况下是~/.CONFIG。因此,我想将所有zsh用户文件存储在$XDG\u CONFIG\u HOME/zsh/中。到目前为止,我们已经做到了这一点: %ls$XDG\u CONFIG\u HOME/zsh/ 历史文件zsh_缓存zshrc 简单,您只需填写~/.zshrc。现在最棘手的部分似乎是让zsh直接读取$XDG_CONFIG_HOME/zsh/zshrc,而不从~/.zshrc获

为了使我的
~
变得更干净,我想将尽可能多的用户配置文件移动到
$XDG\u CONFIG\u HOME
,默认情况下是
~/.CONFIG
。因此,我想将所有zsh用户文件存储在
$XDG\u CONFIG\u HOME/zsh/
中。到目前为止,我们已经做到了这一点:

%ls$XDG\u CONFIG\u HOME/zsh/
历史文件zsh_缓存zshrc

简单,您只需填写
~/.zshrc
。现在最棘手的部分似乎是让zsh直接读取$XDG_CONFIG_HOME/zsh/zshrc,而不从~/.zshrc获取它。如何继续?

在将环境变量
ZDOTDIR
设置到您希望zsh查找配置文件的位置后,为zsh编写一个执行
zsh
的包装器


请参阅:

可以编辑
/etc/zsh/zshenv
来设置
$XDG\u CONFIG\u HOME
目录和
$ZDOTDIR
。不过,这需要对这些文件具有写入权限

因此,如果zsh在阅读时定义了
$HOME
(我不知道是否是这样),您可以在
/etc/zsh/zshenv
中添加以下内容:

if[-z“$XDG\u CONFIG\u HOME”]]
然后
export XDG_CONFIG_HOME=“$HOME/.CONFIG/”
fi
如果[-d“$XDG\u CONFIG\u HOME/zsh”]]
然后
export ZDOTDIR=“$XDG\u CONFIG\u HOME/zsh/”
fi

Psycholave答案的变体,它使用${HOME}/.zshenv启动环境。不需要根访问权限

export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:=${HOME}/.config}
export ZDOTDIR=${ZDOTDIR:=${XDG_CONFIG_HOME}/zsh}
source $ZDOTDIR/.zshenv
这在zsh用户邮件列表中进行了讨论


<>你可能想考虑保存XDGZDATAHOSTHOLD中的历史记录。规范可在中找到。

最好不要将
/
放在持有特定路径的任何变量的末尾

例如,
$XDG\u CONFIG\u HOME/zsh
转换为
“$HOME/.CONFIG//zsh”
/
重复,因为
XDG\u CONFIG\u HOME
//code>结尾

所以我认为你的答案应该是-

if [[ -z "$XDG_CONFIG_HOME" ]]
then
        export XDG_CONFIG_HOME="$HOME/.config"
fi

if [[ -d "$XDG_CONFIG_HOME/zsh" ]]
then
        export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
fi

感谢您提供的链接,我认为结合在
/etc/zsh/
中编辑文件应该可以做到这一点。但它确实消除了编辑为root/etc文件的需要,在跨多台机器维护配置时,这些文件可能是皇家PITA,您的~/.zshenv可以是dropbox同步文件的符号链接。请注意,
$XDG\u CONFIG\u HOME/zsh/
中的文件必须以前导点命名,
.zshrc
,如果您希望zsh自动读取它们。我不知道zsh是否能够使用变量(如
$ZSHRC
)来改变这一点。谢谢。但是,这并不意味着从
~
目录中删除所有配置文件:(但是,
zsh
bash
)也会自动用一个斜杠替换一组连续的正斜杠。因此,
$HOME/.config//zsh
并不完全糟糕。