日々のあれこれφ(..)

もっぱら壁打ち

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ブロック目に関しては、各変数を色の予約語で再設定したものになります。

f:id:reiichii:20220105194703p:plain

これで次引っ越した際にはスムーズになるはず🐟