以前にstarship+asdfでプロンプトの表示が遅くなるのを改善するという記事を書いた。 この時はdirenvを使うことで解決したのだが、どうも最近再発していた。 さすがに、プロンプトの表示が遅いのはストレスなので、他のものに乗り換えるかasdfをやめるかって思っていたら、asdfをRustで再実装したというrtxというのが流れてきたので試してみた。
rtxを使ってみた感想
結論としてはstarship+asdfで起こっていたプロンプトの表示が遅くなる問題が解決した。 どのくらい早くなったのかを数値で示したいところなのだが、どうもstarship explainで取れない部分*1で遅くなっていたようで数値で測れないのであった…。
(2023/02/06追記:) Enterキーを押し続けたたときの表示差をスクリーンキャプチャしてみた。
youtu.be (追記ここまで)
使い勝手についてはasdfのRustクローンを名乗っているだけあって違和感なく使える。 しかし、fish-shellの場合*2起動時の初期化スクリプト(config.fish)の中で、rtxでインストールしたバイナリを呼び出そうとするとエラーになってしまう問題が出た。 どうやら、rtx activate fishした瞬間にインストールした各プラグインのパスを追加するわけではなく、プロンプトを表示するときにフックを追加しそのフックの中でパスを追加するコマンドを実行していた。 なので、config.fishの中でそのコマンドを実行することで問題が解決できる。 (ついでに補完コマンドも追加しておくとよい)
# config.fish rtx activate fish | source rtx hook-env -s fish | source # プラグインのパスを追加する rtx complete -s fish | source # rtxの補完を追加
asdfからの移行
(2023/02/27追記:) id:shucream にmsgpackファイルも移動するとうまく移行できるということを教えてもらった。 詳細はこちら。 (追記ここまで)
rtx公式にはasdfからの移行手順は用意されていないようだった。 asdfのクローンであるから、asdfのデータをrtxのデータディレクトリにもっていけばいけるかな?っと思ったのだがダメだった…。 素直に再インストールするしかなさそうだった。 幸いなことにrtx lsをするとどのプラグインがインストールされていないかわかるので、これを頼りにインストールしていく。
asdfと違いrtx globalすると自動的にrtx plugin addとrtx install
asdfプラグインによってはエラーになることがある。その時は手動でrtx installすれば回避できると思う。
おまけ:tmuxのバイナリが生成されない
rtx install tmux latest
してもバイナリが生成されない…。
どうやら、asdf-tmuxのインストールスクリプトにバグがありmakeが失敗しても正常にインストールが完了したことになってしまうようだ。
これを解決するにはGNU Bisonとautomakeをインストールするとtmuxのバイナリが生成できる。