svnの補完関数を書こう(1) -準備編-
svnの補完関数を書いてみよう。まずは、ディレクトリ等の準備から。
補完関数はfpathに記述されたディレクトリから自動でロードされる。なので、まずfpathに好きなディレクトリを設定する。
# .zshrc fpath=(~/config/fun $fpath)
そして、そのディレクトリに_svnという名前のファイルを置く。
#compdef svn colorsvn local expl _description files expl "compressed file" _files "$expl[@]" -g "*.gz"
内容は、gnuzipの補完関数をそのまま写しただけの適当なやつです。
あと、一行目でどのコマンドに対する補完を行うかを指定している。なので、これを消すとうまく動かない。
このあと、zshを再起動させるとsvnのあとに拡張子がgzのファイルが補完されるようになる。
$ svn ^D compressed files baz.gz foo.tar.gz
あとは、この_svnの中身を書き換えていくことになる。
おまけ
デバッグ用の設定。必要に応じてロードするようにしている。
# 表示を冗長にする zstyle ':completion:*' verbose yes zstyle ':completion:*:descriptions' format '%B%d%b' zstyle ':completion:*:messages' format '%d' zstyle ':completion:*:warnings' format 'No matches for: %d' zstyle ':completion:*' group-name '' # C-X hで現在のコンテキストが表示される bindkey '^Xh' _complete_help # ~/config/fun以下の補完関数を全部再ロード r() { local f f=(~/config/fun/*(.)) unfunction $f:t 2> /dev/null autoload -U $f:t compinit -u }