fish shellのprompt_pwdを少し改造する
イントロ
日々fish shellを使っているのですが、
プロントの表示を変更したくなりました。
ただ、単純には変更できなかったのでカスタマイズしてみました。
というお話です。
一般的なやり方
fish shell で プロンプト を変更する場合は以下のコマンドを打ちます。
fish_config
ブラウザが起動して設定を選択することでプロンプトを変更できます。
選択して好きな設定にできます。
変更した点
例えば以下のディレクトリで作業していた場合
/Users/hotoolong/.ghq/github.com/hotoolong/translate.nvim
変更前のプロンプトの表示は以下になります。(私の設定の場合)
~/.g/g/h/translate.nvim (master|✔) $
これでもいいのですが、 現在作業しているディレクトリと親のディレクトリも省略しないで表示してほしいのです。
なぜなら、githubのディレクトリ構造だとオーナー名/リポジトリ名 になっているため、 自分が作業しているディレクトリがどのリポジトリ配下のかというのいちいちチェックしたくなかったからです。
ということで
いろいろ調べてみたのですが、
デフォルトでは省略されている名称のサイズは変更可能なのですが、
親ディレクトリだけ省略を変更するようなオプションは見受けられませんでした。
ちなみに 省略名称のサイズを3に変更したい場合はconfigに以下のように設定します。
set -g fish_prompt_pwd_dir_length = 3
こうすることで
~/.ghq/git/hot/translate.nvim (master|✔) $
というように表示されます。
これはこれで便利ですが、やはり親ディレクトリもフルで表示されてほしい。
プロンプトで表示しているディレクトリ情報は prompt_pwd で取得できます。
コードは以下にあります。
https://github.com/fish-shell/fish-shell/blob/master/share/functions/prompt_pwd.fish
prompt_pwd の内容はfish_prompt_pwd_dir_length 以外の 変更できないようです。
そこで関数を上書きしてみました。
最後の処理が省略して表示している処理になります。
string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $tmp
この処理を変更して
set -l folders (string split -rm2 / $tmp) echo (string replace -ar '(\.?[^/]{'"$fish_prompt_pwd_dir_length"'})[^/]*/' '$1/' $folders[1]'/')$folders[2]'/'$folders[3]
として/の右2つ分を取得してそれ以前のデータは既存のように省略データにしてつなぎ合わせています。
こうすることで
~/.g/g/hotoolong/translate.nvim (master|✔) $
となりました。 これで少し作業が捗りそうです。