macOSをCatalinaにしたらfish shellの補完が遅くなった話
1. 問題
fish shellでは下図のように,コマンドを入力すると途中で候補を薄く表示してくれて,TABを押すことでそれが補完されます.
反応もディレイなしと,非常に使い勝手が良かったのですが,Catalinaにアップデートしてから反応が悪くなりました.
私の環境では,clear
のcle
まで入力してTABを押してから約1秒待たされるようになりました.
2. 解決策
解決策はこちらにありました.
上記サイトに依ると,__fish_describe_command
が悪さをしているから,これを修正すれば解決するようです.
2.1 プロファイルの取得
まずプロファイルを取得し,__fish_describe_command
が使っている時間を調べます.
以下のコードを実行することで新しくfish shellが立ち上がり,そのシェルを終了するまでの実行されたコマンドとその処理時間が output_filename
に書き出されます.
$ fish --profile output_filename
上記コードを実行し,時間がかかっているコマンドを実行し,そしてシェルを閉じます.
(私の環境ではclear
の補完が死ぬほど遅かったので,cle
まで入力 -> TABで補完,を行いました)
吐き出された output.txt
を見ると,cle
の段階で__fish_describe_command
が実行され,そこに非常に時間がかかっていることが確認できました.
2.2 関数の修正
参照サイトと同じ関数で時間がかかっていることが確認できたので,この関数を修正します.
この関数の場所は,上記画像の__fish_describe_command
の直後に書かれています.
この関数ファイルを開き,関数をfunction __fish_describe_command; end
で置き換えるだけです.
修正後にもう一度先ほどと同じようにプロファイルをとって確認してみます.
修正前は638459 [単位不明] かかっていたのに対し,修正後は232で終了していることが確認できました.