更改 macOS 中 zsh 补全缓存文件的默认位置

更改 macOS 中 zsh 补全缓存文件的默认位置

我正在尝试更改 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 目录并将缓存文件转储到该位置。

如图所示: 缓存文件的位置

但是,尽管我已设置了特定位置,但 .zcompdump 文件仍然被转储到我的 $HOME 目录中。

如图所示:
主目录中的 .zcompdump

我曾经使用过 oh-my-zsh,但我发现它对于我的要求来说太臃肿了,以前的 oh-my-zsh 配置中是否存在任何残留设置,这可能会导致我的 $HOME 目录中出现额外的 .zcompdump?

答案1

更新并修复。

我已将代码更新为以下内容,以修复创建两个转储文件的问题。

ZSH_COMPDUMP="$HOME/.cache/zsh/zcompcache"

# Create the parent directory if it doesn't exist
[[ -d $ZSH_COMPDUMP ]] || mkdir -p $ZSH_COMPDUMP

_comp_files=($ZSH_COMPDUMP/zcompdump(Nm-20))
if (( $#_comp_files )); then
    autoload -Uz compinit -C -d "$ZSH_COMPDUMP/.zcompdump-${ZSH_VERSION}"
else
    autoload -Uz compinit -d "$ZSH_COMPDUMP/.zcompdump-${ZSH_VERSION}"
fi

以前的实现存在一个问题,即由于 compinit 命令是从函数外部调用的,因此会创建两个转储文件。这导致在 $HOME 目录中创建了一个转储文件,而代码则创建了一个转储文件。

代码已被修改为在函数内部调用 compinit 来解决这个问题。这确保在执行必要的检查和应用适当的设置时只调用一次 compinit。通过这样做,我们解决了转储文件的重复问题并确保了代码的正确行为。

如果有人有任何进一步的见解或其他建议,请回答我。

谢谢

答案2

该文件似乎.zcompdump是由 /etc/zsh/zshrc 创建的。打开该文件时,会看到一条注释。

# If you don't want compinit called here, place the line
# skip_global_compinit=1
# in your $ZDOTDIR/.zshenv
if (( ${${(@f)"$(</etc/os-release)"}[(I)ID*=*ubuntu]} )) &&
   [[ -z "$skip_global_compinit" ]]; then
  autoload -U compinit
  compinit
fi

我必须创建 .zshenv 文件并将 skip_global_compinit=1 放入其中,从那时起它就不再创建该.zcompdump文件了。

相关内容