🐳
MontereyでDockerのcommand補完する方法
MontereyでDocker commandのzsh-completion対応しようと思ったらうまくいかなかった話
どうやら、Montereyから/usr/配下のpermissionがさらに厳しくなっているもよう。
Docker公式の方法で説明されているとおりシンボリックリンク張る方法を試そうとしたところ、is operation not permitted エラーで実行できず。iTermのフルディスクアクセスは許可にしているにもかかわらず。
公式の方法はこちら
In Zsh, the completion system takes care of things. To activate completion for Docker commands, these files need to be copied or symlinked to your Zsh site-functions/ directory. For example, if you installed Zsh via Homebrew:
zsh
etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose
自分の環境では(brew install ではなく、zinit で zsh-completion をインストールしているで)zsh/site-functions/ の場所が、公式で示されている例の /usr/local/share/zsh/site-functions/ ではなく、/usr/share/zsh/site-functions/ となっているのも影響しているのか…と思5つ別の方法を検索。
以下の方法で対応可能だった。
- completionsの補完スクリプト用のディレクトリを作成
- そこに
docker.zsh-completionとdocker-compose.zsh-completionのシンボリックリンクを、それぞれ_dockerおよび_docker-composeとして作成 -
.zshrcで補完スクリプト用のディレクトリをfpath指定
zsh
mkdir /.zsh/completions
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.zsh-completion ~/.zsh/completions/_docker
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.zsh-completion ~/.zsh/completions/_docker-compose
- さらに、.zshrcに下記を追加する
~/.zshrc
if [ -e ~/.zsh/completions ]; then
fpath=(~/.zsh/completions $fpath)
fi
Discussion
あ、実は
/usr/share/zsh/site-functions/をchmodすればよかったのかしら。