Estou tentando alterar o local padrão dos arquivos de cache de conclusão zsh no macOS. Eu li a documentação do zsh após a conclusão, que diz "alternativamente, um nome de arquivo explícito pode ser fornecido por 'compinit -d dumpfile'". Eu configurei a variável ZCOMPCACHE e continuei com o seguinte código:
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
O código funciona e cria o diretório zcompcache em .cache/zsh e despeja o arquivo de cache nesse local.
No entanto, ainda estou recebendo um arquivo .zcompdump despejado em meu diretório $HOME, embora eu tenha definido um local específico.
Eu costumava usar oh-my-zsh, mas achei muito inchado para os meus requisitos. Poderia haver alguma configuração residual da configuração anterior do oh-my-zsh que pode estar causando o .zcompdump adicional em meu diretório $HOME?
Atualize e corrija.
Atualizei meu código para o seguinte para corrigir o problema de criação de dois arquivos de despejo.
A implementação anterior tinha um problema em que dois arquivos de despejo estavam sendo criados porque o comando compinit estava sendo chamado de fora da função. Isso resultou na criação de um arquivo de despejo no diretório $HOME e no arquivo criado pelo código.
O código foi modificado para chamar compinit dentro da função para resolver isso. Isso garante que o compinit seja chamado apenas uma vez durante a execução das verificações necessárias e a aplicação das configurações apropriadas. Ao fazer isso, resolvemos a duplicação de arquivos dump e garantimos o correto comportamento do código.
Se alguém tiver mais ideias ou sugestões alternativas, envie-me uma resposta.
Obrigado