Django の開発中の不満の一つが pipenv run の補完だ。 zsh は補完が凄いと聞いていたのに bash から移行してストレスが増えた。 bash はとりあえずファイルがそこにあればいつでも補完が効く。 pipenv run python と打った後にはカレントの manage.py が補完できる。 それに対して、zsh の補完はもっと inteligent で文脈を理解するのだが、何の指定もない文脈では何も補完できない。 本当に使えない。 まあお気づきかと思うが、zsh が使えないというより設定ファイルが酷い、という話、のはずだ。 調査 まずは状況を確認しよう。 Mac の homebrew で pipenv を入れていて、シェルは zsh。 .zshrc で補完の設定は最低限のものだけ。 autoload -Uz compinit && compinit zstyle ':completion:*' completer _complete _ignored _files .zshrc pipenv の補完設定は /usr/local/share/zsh/site-functions/_pipenv にあるが、これは /usr/local/Cellar/pipenv/2023.11.15/share/zsh/site-functions/_pipenv へのシンボリックリンクだ。 homebrew がこの設定ファイルをどこから持ってきているかというと、pipenv.rb の中で次の補助関数で生成している。 generate_completions_from_executable(libexec/"bin/pipenv", shells: [:fish, :zsh], shell_parameter_format: :click) pipenv.rb generate_completions_from_executable は、formula.rb に定義がある。 shell_param...