fishの色設定をカスタマイズして持ち運べるようにする
はじめに
fishを使っており、promptを自分でカスタマイズしています(といってもoh-my-fishのデフォルトを少し改造しただけですが)。カラーテーマに関してはfish_configから選択できる適当なものを使っていたのですが、PCの引越しの際に色設定がうまく引き継がれず、どんな設定を残しておけばよかったのか調べていたら最終的に1から自分で色設定していたという話です。
fishの色の設定に関して
- 変数
fish_color_*
に色を定義する
例えば fish_color_normal
はデフォルトの色、 fish_color_quote
は ""で囲まれた部分の色、といった具合です。
変数の全種類は以下です。
Interactive use — fish-shell 3.3.1 documentation
- fish_configでUIから設定したものは、fish_variablesファイルにユニバーサル変数として残る
fish_variablesは基本システム側が管理しているものなので、dotfileなどに登録して別の環境で適用させることはしません。このファイルに色が定義されていると新しい環境に引っ越してきたときにまたfish_configコマンドを叩いてUIから色の設定をしないといけなくなります。その作業だけなら別に手間ではありませんが、環境設定をできるだけ全てスクリプトを実行させるだけで完結させたいので、各色の指定もfish.configで行うようにしたいと思います。
fish_variableの中では以下のように定義されています。
SETUVAR fish_color_match:\x2d\x2dbackground\x3d61AFEF SETUVAR fish_color_normal:ABB2B SETUVAR fish_color_operator:C678DD
- 色の指定に関して
予約語(red, cyanなど)を使うことができます。それより細かく色を指定するには16進数を使えます。また文字色以外にも --background
で背景の色を指定したり、 --bold
で太字にするといったoptionが存在します。
set_color - set the terminal color — fish-shell 3.3.1
設定をカスタマイズするにあたって、fish_variableの中身を見ただけだと何色になるのかよくわからないものもあったので、set_colorのサンプルに倣って以下のように一個ずつ確認していました😳
# 設定を確認 set_color $fish_color_normal; echo 'foo' # 設定された色が付いたfooが出力される # 設定したい色を当てて表示を確認 set_color 61AFEF; echo 'foo' # 16進数の青 set_color 61AFEF -b FFFFFF; echo 'foo' # 上記に加えて背景が白くなる
fish.configに追加したもの
最終的に以下のようになりました。
# set color set -g black brblack set -g blue 61AFEF set -g red E06C75 set -g green 98C379 set -g yellow E5C07B set -g magenta C678DD set -g cyan 56B6C set -g white normal set -g gray 9C9C9C set -U fish_color_normal $white set -U fish_color_autosuggestion $gray set -U fish_color_cancel --background=$gray set -U fish_color_command $fish_color_normal set -U fish_color_comment $gray set -U fish_color_cwd $green set -U fish_color_cwd_root $red set -U fish_color_end $gray set -U fish_color_error $red set -U fish_color_escape $gray set -U fish_color_history_current --bold set -U fish_color_host $fish_color_normal set -U fish_color_match --background=$blue set -U fish_color_operator $magenta set -U fish_color_param $magenta set -U fish_color_quote $green set -U fish_color_redirection $gray set -U fish_color_user $blue set -U fish_color_search_match --background=$cyan set -U fish_color_selection --background=$fish_color_normal set -U fish_color_valid_path --background=$fish_color_normal set -U fish_pager_color_progress --background=$cyan set -U fish_pager_color_completion $fish_color_normal set -U fish_pager_color_prefix $fish_color_normal
1ブロック目に関しては、もともとあった色の予約語を上書きしたものになっています。
カラーパレットは「Atom's One Dark」のを参考に、赤はE06C75の色、青は61AFEFの色、といった具合に設定しています。
Atom's One Darkのカラーコードはjoshdick/onedark.vimのリポジトリを参考にしました。
2ブロック目に関しては、各変数を色の予約語で再設定したものになります。
これで次引っ越した際にはスムーズになるはず🐟