zsh-completion

zsh-completionとは

zshを使うときに、補完用の情報を設定をしておくことで、例えば、git、aws-cli、dockerなどのコマンドやサブコマンドをTabキーで補完してくれるツールです。

公式サイトは、以下です。

zsh-completionのインストール

macOSを使っている前提ですが、homebrewで簡単にインストールできます。

% brew install zsh-completion

zshのプロファイルスクリプトにzsh-completionの設定をする

zsh-completionをインストールすると、以下のようなメッセージがでます。

zsh-completions: stable 0.33.0 (bottled), HEAD
Additional completion definitions for zsh
https://github.com/zsh-users/zsh-completions
/opt/homebrew/Cellar/zsh-completions/0.32.0_1 (142 files, 1.1MB) *
 Poured from bottle on 2021-05-03 at 10:22:36
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/zsh-completions.rb
License: MIT-Modern-Variant
==> Options
--HEAD
	Install HEAD version
==> Caveats
To activate these completions, add the following to your .zshrc:

 autoload -Uz compinit
 compinit
 
You may also need to force rebuild `zcompdump`:

 rm -f ~/.zcompdump; compinit
 
Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
to load these completions, you may need to run this:

 chmod -R go-w '/opt/homebrew/share/zsh'
 
zsh completions have been installed to:
 /opt/homebrew/share/zsh/site-functions
==> Analytics
install: 9,459 (30 days), 39,117 (90 days), 147,856 (365 days)
install-on-request: 9,388 (30 days), 38,843 (90 days), 146,385 (365 days)
build-error: 0 (30 days)

なお、このメッセージは、brew info zsh-completionコマンドで再表示できます。

このメッセージにしたがって、まずは、次のように .zshrc ファイル設定します。

~/.zshrc
# zsh-completionの設定
autoload -Uz compinit
compinit

zsh関連ファイルの権限設定を行う

次に、zsh関連ファイルの権限設定を行います。これも前述のbrew info で表示されるメッセージに従います。

前述の brew info で表示されるメッセージの /opt/homebrew の部分は、使用しているMacのCPUがIntel製かApple Siliconかによって異なります。

なので、環境に応じて次のようにコマンドを打ちます。

Intel Macの場合

% chmod -R go-w /usr/local/share/zsh/

M1などApple Silicon Macの場合

% chmod -R go-w /opt/homebrew/share/zsh/

あるいは、以下のコマンドを打てばどちらの環境でもOKです。

% chmod -R go-w $(brew --prefix)/share/zsh/

なお、この go-w は、g(roup)とo(thers)から(つまりuser以外から)、書き込み権限を削除(-)しています。

各コマンドラインツールでの補完の設定

git

homebrewでgitをインストールすると、自動的に /usr/local/share/zsh/site-functions/ 以下に、git用の補完設定もインストールされるので、それ以上何もする必要はありません。

gitはmacOS標準のものもありますが、上記の補完設定のために、筆者はhomebrewでgitをインストールしなおしてしまいます。

設定がうまくいっている場合、以下のように補完されます。ブランチ名などは、覚えられないので補完を使うと便利になります。

% git branch <TAB>
(ここに候補となるブランチ一覧が表示される)

docker

公式サイトに説明があるので、それに従います。手順は公式サイトに記載されていて、また、迷うところもないので、ここに手順を記載するのは省略します。

設定がうまくいっている場合、以下のような補完が使えます。

% docker container <TAB>
attach   -- Attach to a running container
commit   -- Create a new image from a container's changes
cp       -- Copy files/folders between a container and the local filesystem
create   -- Create a new container
diff     -- Inspect changes on a container's filesystem
exec     -- Run a command in a running container
export   -- Export a container's filesystem as a tar archive
inspect  -- Display detailed information on one or more containers
kill     -- Kill one or more running containers
logs     -- Fetch the logs of a container
ls       -- List containers
pause    -- Pause all processes within one or more containers
port     -- List port mappings or a specific mapping for the container
prune    -- Remove all stopped containers
rename   -- Rename a container
restart  -- Restart one or more containers
rm       -- Remove one or more containers
run      -- Run a command in a new container
start    -- Start one or more stopped containers
stats    -- Display a live stream of container(s) resource usage statistics
stop     -- Stop one or more running containers
top      -- Display the running processes of a container
unpause  -- Unpause all processes within one or more containers
update   -- Update configuration of one or more containers
wait     -- Block until one or more containers stop, then print their exit codes

aws-cli

aws-cliも公式サイトに従うだけですが、少しわかりにくいので、補足説明を追加します。

公式サイトは、以下です。

なお、この記事では、AWS CLI の記事に記載さた手順でインストールされている前提で補足説明をします。

前述の前提の場合、aws_completer はすでにPATHが通っているので、やることは以下の設定を.zshrcファイルに追加するだけです。

.zshrc
  autoload bashcompinit && bashcompinit   # この行を追加
  autoload -Uz compinit
  compinit
  complete -C '/usr/local/bin/aws_completer' aws   # この行を追加

設定後は、zshを再起動します。

設定がうまくいっていれば、以下のようにawsコマンドの補完が効くようになります。

% aws s<TAB>
s3                              securityhub                     sqs
s3api                           serverlessrepo                  ssm
s3control                       service-quotas                  sso
s3outposts                      servicecatalog                  sso-admin
sagemaker                       servicecatalog-appregistry      sso-oidc
sagemaker-a2i-runtime           servicediscovery                stepfunctions
sagemaker-edge                  ses                             storagegateway
sagemaker-featurestore-runtime  sesv2                           sts
sagemaker-runtime               shield                          support
savingsplans                    signer                          swf
schemas                         sms                             synthetics
sdb                             snowball                        
secretsmanager                  sns          

本サイトの更新情報は、Twitterの株式会社プレセナ・ストラテジック・パートナーズエンジニア公式アカウントで発信しています。ご確認ください。

最終更新