普段の暮らしでは自作のgitサブコマンドを作って便利に使っている。
のだけど、通常そのままではzshの補完が効かず、全て打つかhistoryから呼び出すかする必要があった。不便だしさすがに何か方法あるだろうな〜と探っていたところ発見したのでご紹介。
A better solution is to create a function _git-foo() to handle specific completion for that command. This also allows you to add command-specific completion as well. Place such a function inside an autoloaded #compdef file and you should be all set. You can add a description to such a function by adding a line matching
#description DESCRIPTION
as the second line in the file. See Completion/Debian/Command/_git-buildpackage in the Zsh sources for an example.
ふむふむ。つまり、通常の補完ファイルと同様に _git-foo
のような命名でファイルを置くとよいとのこと。詳しくは Completion/Debian/Command/_git-buildpackage
を見ると分かりそう。
#compdef git-buildpackage #description build Debian packages from a git repository _arguments \ '--version[show program version number and exit]' \ '--help[show help message and exit]' \ '--git-ignore-new[build with uncommitted changes in the source tree]' \ ...
zsh/_git-buildpackage at master · zsh-users/zsh · GitHub
なるほど2行目に #description
を書くと補完時に表示されるようだった。_arguments
を使えば引数の補完もできる。
補完のファイルは $fpath
に列挙されているパスに存在している必要がある。自分は $HOME/.zsh/completion
に置くことにした。
fpath=($HOME/.zsh/completion $fpath) autoload -Uz compinit && compinit
これで試しに $HOME/.zsh/completion/_git-delete-branches
を置くと…
$ git de delete-branches - Delete selected branches (peco required) describe - show most recent tag that is reachable from a commit
動いた! ずっと不便だな〜と思っていたのではやいところやっておけばよかった。