我正在尝试更改 macOS 中 zsh 完成缓存文件的默认位置。我已阅读完成时的 zsh 文档,其中说“或者,可以通过 'compinit -d dumpfile' 给出显式文件名”,我设置了 ZCOMPCACHE 变量并继续执行以下代码:
ZCOMPCACHE="$HOME/.cache/zsh/zcompcache"
# Create the parent directory if it doesn't exist
[[ -d $ZCOMPCACHE ]] || mkdir -p $ZCOMPCACHE
# Set the custom location for zcompdump files
_comp_files=($HOME/.cache/zsh/zcompcache(Nm-20))
if (( $#_comp_files )); then
compinit -i -C -d "$HOME/.cache/zsh/zcompcache/.zcompdump-${ZSH_VERSION}"
else
compinit -i -d "$HOME/.cache/zsh/zcompcache/.zcompdump-${ZSH_VERSION}"
fi
# `unset` the temporary variable
unset _comp_files
该代码运行并在 .cache/zsh 下创建 zcompcache 目录,并将缓存文件转储到该位置。
但是,即使我设置了特定位置,我仍然会在 $HOME 目录中转储一个 .zcompdump 文件。
我曾经使用 oh-my-zsh,但我发现它对于我的要求来说太臃肿了,之前的 oh-my-zsh 配置是否留下了任何残留设置,可能会导致我的 $HOME 目录中出现额外的 .zcompdump?
更新并修复。
我已将代码更新为以下内容,以解决创建两个转储文件的问题。
之前的实现存在一个问题,即由于从函数外部调用 compinit 命令而创建了两个转储文件。这导致在 $HOME 目录中创建转储文件以及由代码创建的转储文件。
代码已被修改为在函数内调用 compinit 来解决此问题。这可确保在执行必要的检查和应用适当的设置时仅调用 compinit 一次。通过这样做,我们解决了转储文件的重复问题并确保代码的正确行为。
如果有人有任何进一步的见解或替代建议,请给我答案。
谢谢