🚀

Starship+asdfでプロンプトの表示が遅い問題を解決

2022/12/28に公開

最近またshellの環境を改善しようとしており、色々とバージョンを上げたりしているうちにやたらとプロンプトの表示に時間がかかるようになってきた。

https://tech.buty4649.net/entry/2021/07/29/201613

も解決手段の一つではあるが、流石に面倒なのとそもそも言語のバージョンなどの表示はlsdコマンドで視覚的に伝わるため削除することとした。また大量の言語が並ぶと視覚的にうるさい。

starship explain するとこうなる。

pythonはasdfで入れているものだが普通に python -V するだけで700ms以上かかっていた。

❯ time python -V
Python 3.8.3

________________________________________________________
Executed in  738.26 millis    fish           external
   usr time   13.21 millis    0.15 millis   13.05 millis
   sys time   16.80 millis    1.10 millis   15.70 millis

設定

Starshipのプロンプトのデフォルト設定はここにある。

https://starship.rs/config/#prompt

デフォルト設定の中から利用している必要なものだけを設定した。今使っている ~/.config/starship.toml はこちら。

format = """
$directory\
$git_branch\
$git_commit\
$git_state\
$git_metrics\
$git_status\
$cmd_duration\
$line_break\
$character\
"""

[cmd_duration]
min_time = 5000 # ms

これで

こうなる。

一応formatのそれぞれの意味

  • $directory
    • dotfiles/config 部分。gitリポジトリのrootからのパスを表示するなど賢く、不便に思ったことはない。
  • $git_branch
  • $git_commit
  • $git_state
  • $git_metrics
  • $git_status
    • gitリポジトリ以下にいるとブランチ名や差分のあるファイルを表示してくれる。mergeやrebaseの最中であることも教えてくれる。便利。
  • $cmd_duration
    • 指定した時間以上に時間がかかった際に教えてくれる。
  • $line_break
    • 改行
  • $character
    • 部分。vi操作を利用しているとノーマルモードで に変化するのが嬉しい。

結論

根本原因は python -V に時間がかかりすぎていることだが、見ない情報なので言語とそのバージョンをプロンプトに表示しないこととして解決した。

Discussion