2020年8月12日水曜日

zsh で docker の CLI コマンドを補完する方法

概要

docker コマンドを実行した際にコンテナ名やイメージ名を補完してくれないと面倒です
今回は Mac 上の zsh を使っている場合に補完する方法を紹介します

環境

  • macOS 10.15.6
  • zsh 5.7.1

zsh-completions のインストール

  • brew install zsh-completions

.zshrc への追記

  • vim ~/.zshrc
if type brew &>/dev/null; then                                                                                        
  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
  autoload -Uz compinit
  compinit                                                                                               
fi

mac の場合 zsh-completions のスクリプトを管理するパスは /usr/local/share/zsh-completions/ になっています

ディレクトリの権限変更

  • chmod go-w '/usr/local/share'

これを実行しないと zsh compinit: insecure directories, run compaudit for list. で怒られます

docker-compose 用の補完スクリプトを配置

  • curl -L https://raw.githubusercontent.com/docker/compose/1.26.2/contrib/completion/zsh/_docker-compose > $(brew --prefix)/share/zsh-completions/_docker-compose

Mac の場合は Docker for Mac に含まれているのでそれを zsh-completions ディレクトリにシンボリックリンクすれば OK です

またシンボリックを貼るディレクトリは /usr/local/share/zsh-completions ではなく usr/local/share/zsh/site-functions/ なので注意しましょう

  • ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose

docker コマンドおよびイメージ名やコンテナ名の補完スクリプトを配置

  • ln -s /Applications/Docker.app/Contents/Resources/etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker

zcompdump の再生成

  • rm -f ~/.zcompdump; compinit

シェルの再ログイン

これでターミナルを一度 exit して再度ログインすれば補完してくれます

参考サイト

1 件のコメント:

  1. /usr/local の部分は brew --prefix の値になるのでリンクする場合も $(brew --prefix)/ で置き換えたほうが楽です

    返信削除