8

为了让我~的地方更干净,我想将尽可能多的用户配置文件移动到默认$XDG_CONFIG_HOME情况~/.config下。所以我想将我所有的 zsh 用户文件存储在$XDG_CONFIG_HOME/zsh/. 到目前为止已经有了这个:

% ls $XDG_CONFIG_HOME/zsh/
histfile  zsh_cache zshrc

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

4

4 回答 4

9

可以编辑/etc/zsh/zshenv设置$XDG_CONFIG_HOME目录和$ZDOTDIR. 但是,这需要对此文件的写入权限。

因此,$HOME如果在 zsh 读取它时定义了它(我不知道是不是这种情况),您可以添加到您的/etc/zsh/zshenv

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
于 2014-01-16T13:42:24.460 回答
7

最好不要将 a/放在任何包含特定路径的变量的末尾。

例如,$XDG_CONFIG_HOME/zsh翻译为"$HOME/.config//zsh"/重复,因为以 .XDG_CONFIG_HOME结尾/

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

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
于 2019-12-01T12:53:46.993 回答
3

使用 ${HOME}/.zshenv 来启动环境的心理奴隶的答案的变体。无需root访问权限。

export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:=${HOME}/.config}
export ZDOTDIR=${ZDOTDIR:=${XDG_CONFIG_HOME}/zsh}
source $ZDOTDIR/.zshenv

这在 zsh-users 邮件列表上的这个线程上进行了讨论。

您可能需要考虑在 XDG_DATA_HOME 中保存历史记录。可以在XDG 基本目录规范中找到规范

于 2017-10-26T19:31:00.073 回答
0

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

见:http: //zsh.sourceforge.net/Intro/intro_3.html

于 2014-01-16T13:42:11.973 回答