🐍

`uv run`でファイルパスを補完する方法

2025/01/22に公開

Pythonの世界は進化が激しく、ちょっと前までvenvでプロジェクトを作るのが主流だったのが今はuvだという。
https://docs.astral.sh/uv/
このuvはRustベースで動作も機敏だし、venvの環境やpyproject.tomlも自動で作ってくれるので完成度が高い。今後デファクトになっていくのではないかと思う。

しかし、uvを使ってみると1つだけ痒いところに手が届かない問題がある。表題の、uv runでファイルパス補完が効かない問題だ。

uv run [ファイルパス]

https://github.com/astral-sh/uv/issues/8432

解決方法

解決方法がこのGitHub issueに示されているので、紹介する。

https://github.com/astral-sh/uv/issues/8432#issuecomment-2453494736

以下のファイルをsource uvするか、他のcompletionファイルが置いてあるディレクトリに置くだけ(例えば、~/.completion.d/)。

uv
# License: CC0

eval "$(uv generate-shell-completion zsh)"

_uv_run_mod() {
    if [[ "$words[2]" == "run" && "$words[CURRENT]" != -* ]]; then
        _arguments '*:filename:_files'
    else
        _uv "$@"
    fi
}
compdef _uv_run_mod uv

これでターミナルを再度立ち上げればuv run [TAB]でファイルの補完が効くようになる。

Discussion