LL言語の各種envのzsh補完関数が死亡していたので修正した

### 1/23 追記
Ressさんがzshプラグインにまとめてくれました。
[39e/zsh-completions-anyenv: ZSH Completions for **env](https://github.com/39e/zsh-completions-anyenv)

それぞれのプラグインマネージャで
`zgen load 39e/zsh-completions-anyenv`
`zplug "39e/zsh-completions-anyenv"`
`antigen bundle 39e/zsh-completions-anyenv`
するなどして使ってください。

# anyenv系のzsh補完が死亡している
自分はRuby・Node・Pythonのバージョン管理に各々の{rb,nod,py}envを使っています。
- [rbenv/rbenv: Groom your app’s Ruby environment](https://github.com/rbenv/rbenv)
- [pyenv/pyenv: Simple Python version management](https://github.com/pyenv/pyenv)
- [nodenv/nodenv: Manage multiple NodeJS versions.](https://github.com/nodenv/nodenv)
が、それぞれのパッケージで提供されているzshの補完ファイルが死亡していたので手元で修正して動くようにしました。

そんなに頻繁に使うコマンドじゃないからサブコマンドを覚えてないし、手癖でTab押すとファイル補完が入って毎回イライラしていたのでいいかげん対応したという感じです。例えば https://github.com/rbenv/rbenv/blob/master/completions/rbenv.zsh を見ると5年間更新されていません。
ちなみにzshのバージョンは5.4.2を使っています。

そんなに頻繁にバージョン変えないしそれぞれの実装がコピペっぽいし同じ死亡の仕方をしていたので同じ修正の仕方をして対応できたのでよかったです。

既存実装は

```shell
if [[ ! -o interactive ]]; then
    return
fi

compctl -K _rbenv rbenv

_rbenv() {
  local words completions
  read -cA words

  if [ "${#words}" -eq 2 ]; then
    completions="$(rbenv commands)"
  else
    completions="$(rbenv completions ${words[2,-2]})"
  fi

  reply=("${(ps:\n:)completions}")
}
```

という感じなのですが、おそらく現在zshの一般的な補完になっている `compinit` を使うと `compctl` の部分でエラーを吐いて死亡します。（厳密にいうと `compinit` を読んだあとに `compctl` を使った補完を実行しようとすると死ぬ気がする。）
情報が少なかったのであまりちゃんと調べてられていないのですが、 `compctl` は古いから使うなみたいな空気を感じました。

```
$ rbenv [Tab]
_rbenv:read:2: option valid only in functions called via compctl
Usage: rbenv completions <command> [arg1 arg2...]
```

のでこれらを `compinit` で補完できるコードに書き換えます。

参考
- [zshでサブコマンドとファイル名を手抜き補完する - Glide Note](http://blog.glidenote.com/blog/2012/05/03/zsh-completion/)
- [zsh の補完関数の自作導入編](https://gist.github.com/mitukiii/4954559)

既存実装の通り各種envには `rbenv commands` と `rbenv completions` のような便利コマンドが実装されているのでそれを使って雑に補完候補を出す方向でいきます。 `fpath` の通ったところに `_rbenv` `_nodenv` `_pyenv` を配置します。

```shell:.zshrc
fpath=(~/.zsh/completions $fpath)
```

```shell:~/.zsh/completions/_rbenv
#compdef rbenv

_rbenv() {
  local -a cmds

  if (( CURRENT == 2 )); then
    cmds=( $(rbenv commands) )
    _describe -t commands "all commands" cmds
  else
    cmds=( $(rbenv completions ${words[2]}) )
    _describe -t commands "sub commands" cmds
  fi
}
```

というような感じで設定します。設定後に `rm -f ~/.zcompdump; compinit` するとよいと思います。
その後補完を試してみると

```
$ rbenv [Tab]
[all commands]
--version     completions     global     hooks     install     prefix             rehash     shell     uninstall     version-file          version-file-write     version-origin     whence
commands      exec            help       init      local       realpath.dylib     root       shims     version       version-file-read     version-name           versions           which

$ rbenv install [Tab]
[sub commands]
--force          1.8.7-p174      1.9.1-p376      1.9.3-p426      2.1.0-rc1       2.3.4                 jruby-1.7.10        jruby-9.0.0.0.rc1  rbx-2.10        rbx-3.12  rbx-3.41  rbx-3.70
--help           1.8.7-p22       1.9.1-p378      1.9.3-p429      2.1.1           2.3.5                 jruby-1.7.11        jruby-9.0.0.0.rc2  rbx-2.11        rbx-3.13  rbx-3.42  rbx-3.71
--keep           1.8.7-p248      1.9.1-p429      1.9.3-p448      2.1.10          2.3.6                 jruby-1.7.12        jruby-9.0.1.0      rbx-2.2.10      rbx-3.14  rbx-3.43  rbx-3.72
--list           1.8.7-p249      1.9.1-p430      1.9.3-p484      2.1.2           2.4.0                 jruby-1.7.13        jruby-9.0.3.0      rbx-2.2.2       rbx-3.15  rbx-3.44  rbx-3.73
--patch          1.8.7-p299      1.9.1-p431      1.9.3-p545      2.1.3           2.4.0-dev             jruby-1.7.14        jruby-9.0.4.0      rbx-2.2.3       rbx-3.16  rbx-3.45  rbx-3.74
--skip-existing  1.8.7-p301      1.9.1-preview1  1.9.3-p547      2.1.4           2.4.0-preview1        jruby-1.7.15        jruby-9.0.5.0      rbx-2.2.4       rbx-3.17  rbx-3.46  rbx-3.75
--verbose        1.8.7-p302      1.9.1-preview2  1.9.3-p550      2.1.5           2.4.0-preview2        jruby-1.7.16        jruby-9.1.0.0      rbx-2.2.5       rbx-3.18  rbx-3.47  rbx-3.76
--version        1.8.7-p330      1.9.1-rc1       1.9.3-p551      2.1.6           2.4.0-preview3        jruby-1.7.16.1      jruby-9.1.0.0-dev  rbx-2.2.6       rbx-3.19  rbx-3.48  rbx-3.77
1.8.5-p113       1.8.7-p334      1.9.1-rc2       1.9.3-preview1  2.1.7           2.4.0-rc1             jruby-1.7.16.2      jruby-9.1.1.0      rbx-2.2.7       rbx-3.2   rbx-3.49  rbx-3.78
1.8.5-p114       1.8.7-p352      1.9.2-p0        1.9.3-rc1       2.1.8           2.4.1                 jruby-1.7.17        jruby-9.1.10.0     rbx-2.2.8       rbx-3.20  rbx-3.5   rbx-3.79
1.8.5-p115       1.8.7-p357      1.9.2-p136      2.0.0-dev       2.1.9           2.4.2                 jruby-1.7.18        jruby-9.1.11.0     rbx-2.2.9       rbx-3.21  rbx-3.50  rbx-3.8
1.8.5-p231       1.8.7-p358      1.9.2-p180      2.0.0-p0        2.2.0           2.4.3                 jruby-1.7.19        jruby-9.1.12.0     rbx-2.3.0       rbx-3.22  rbx-3.51  rbx-3.80
1.8.5-p52        1.8.7-p370      1.9.2-p290      2.0.0-p195      2.2.0-dev       2.5.0                 jruby-1.7.2         jruby-9.1.13.0     rbx-2.4.0       rbx-3.23  rbx-3.52  rbx-3.81
1.8.6            1.8.7-p371      1.9.2-p318      2.0.0-p247      2.2.0-preview1  2.5.0-dev             jruby-1.7.20        jruby-9.1.14.0     rbx-2.4.1       rbx-3.24  rbx-3.53  rbx-3.82
1.8.6-p110       1.8.7-p373      1.9.2-p320      2.0.0-p353      2.2.0-preview2  2.5.0-preview1        jruby-1.7.20.1      jruby-9.1.15.0     rbx-2.5.0       rbx-3.25  rbx-3.54  rbx-3.83
1.8.6-p111       1.8.7-p374      1.9.2-p326      2.0.0-p451      2.2.0-rc1       2.5.0-rc1             jruby-1.7.21        jruby-9.1.2.0      rbx-2.5.1       rbx-3.26  rbx-3.55  rbx-3.84
1.8.6-p114       1.8.7-p375      1.9.2-p330      2.0.0-p481      2.2.1           2.6.0-dev             jruby-1.7.22        jruby-9.1.3.0      rbx-2.5.2       rbx-3.27  rbx-3.56  rbx-3.9
1.8.6-p230       1.8.7-p71       1.9.2-preview1  2.0.0-p576      2.2.2           jruby-1.5.6           jruby-1.7.23        jruby-9.1.4.0      rbx-2.5.3       rbx-3.28  rbx-3.57  ree-1.8.7-2011.03
1.8.6-p286       1.8.7-p72       1.9.2-preview3  2.0.0-p594      2.2.3           jruby-1.6.3           jruby-1.7.24        jruby-9.1.5.0      rbx-2.5.4       rbx-3.29  rbx-3.58  ree-1.8.7-2011.12
1.8.6-p287       1.8.7-preview1  1.9.2-rc1       2.0.0-p598      2.2.4           jruby-1.6.4           jruby-1.7.25        jruby-9.1.6.0      rbx-2.5.5       rbx-3.3   rbx-3.59  ree-1.8.7-2012.01
1.8.6-p36        1.8.7-preview2  1.9.2-rc2       2.0.0-p643      2.2.5           jruby-1.6.5           jruby-1.7.26        jruby-9.1.7.0      rbx-2.5.6       rbx-3.30  rbx-3.6   ree-1.8.7-2012.02
1.8.6-p368       1.8.7-preview3  1.9.3-dev       2.0.0-p645      2.2.6           jruby-1.6.5.1         jruby-1.7.27        jruby-9.1.8.0      rbx-2.5.7       rbx-3.31  rbx-3.60  topaz-dev
1.8.6-p369       1.8.7-preview4  1.9.3-p0        2.0.0-p647      2.2.7           jruby-1.6.6           jruby-1.7.3         jruby-9.1.9.0      rbx-2.5.8       rbx-3.32  rbx-3.61
1.8.6-p383       1.9.0-0         1.9.3-p105      2.0.0-p648      2.2.8           jruby-1.6.7           jruby-1.7.4         jruby-9.2.0.0-dev  rbx-2.6         rbx-3.33  rbx-3.62
1.8.6-p388       1.9.0-1         1.9.3-p125      2.0.0-preview1  2.2.9           jruby-1.6.7.2         jruby-1.7.5         maglev-1.0.0       rbx-2.7         rbx-3.34  rbx-3.63
1.8.6-p398       1.9.0-2         1.9.3-p194      2.0.0-preview2  2.3.0           jruby-1.6.8           jruby-1.7.6         maglev-1.1.0-dev   rbx-2.71828182  rbx-3.35  rbx-3.64
1.8.6-p399       1.9.0-3         1.9.3-p286      2.0.0-rc1       2.3.0-dev       jruby-1.7.0           jruby-1.7.7         maglev-2.0.0-dev   rbx-2.8         rbx-3.36  rbx-3.65
1.8.6-p420       1.9.0-4         1.9.3-p327      2.0.0-rc2       2.3.0-preview1  jruby-1.7.0-preview1  jruby-1.7.8         mruby-1.0.0        rbx-2.9         rbx-3.37  rbx-3.66
1.8.7            1.9.0-5         1.9.3-p362      2.1.0           2.3.0-preview2  jruby-1.7.0-preview2  jruby-1.7.9         mruby-1.1.0        rbx-3.0         rbx-3.38  rbx-3.67
1.8.7-p160       1.9.1-p0        1.9.3-p374      2.1.0-dev       2.3.1           jruby-1.7.0-rc1       jruby-9.0.0.0       mruby-1.2.0        rbx-3.1         rbx-3.39  rbx-3.68
1.8.7-p17        1.9.1-p129      1.9.3-p385      2.1.0-preview1  2.3.2           jruby-1.7.0-rc2       jruby-9.0.0.0.pre1  mruby-1.3.0        rbx-3.10        rbx-3.4   rbx-3.69
1.8.7-p173       1.9.1-p243      1.9.3-p392      2.1.0-preview2  2.3.3           jruby-1.7.1           jruby-9.0.0.0.pre2  mruby-dev          rbx-3.11        rbx-3.40  rbx-3.7
```

となりました。
上手く補完できていますね。これで大分快適になりました。

PRを出そうかと思ったのですが動作としては安定しているからかあまり活発ではなさそうなので迷うところです。