如何在$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
并不完全糟糕。