こんにちは、バックエンドエンジニアのTKです。
これまで、開発マシンのデフォルトシェルとして約5年ほどzshを使っていました。いろんなプラグインを追加したりプロンプトをカスタマイズしたりしていて、それなりに愛着も湧いていました。
立ち上がりに少し時間がかかっていたくらいで特に大きな不満もなかったのですが、新年度ということで心機一転しようと思いたちfishにのりかえたので、いろいろと書いていこうと思います。
ちなみに、fishは数年前に話題になっていたとき、ほんの一瞬だけ触ってみたことがありました。
しかし、そのときはのりかえることを考えて触ったわけでもなかったので「これならカスタマイズ済のzshのままでいいや」と判断しそれ以来立ち上げることもありませんでした。それでも、zsh以外だったらfish一択だなと考えていたので、今回シェルに選ぶにあたり特に悩むことなく決めました。
目次
fishのここがいい
fishについてはいろんなところで紹介されているのですが、担当編集がうるさいので実際にのりかえてみてボクが感じたいいところを書いておきます。
補完が優秀
zshも他のシェルに比べると補完が優秀で、さらにプラグインを追加すると補完で困るようなことはありませんでした。
しかし、fishはデフォルトの状態でも強力な補完を提供してくれます。実際使ってみると本当にすごいです。
入力内容のシンタックスハイライト
zshでもプラグインを追加することで入力内容をリアルタイムでシンタックスハイライトすることができるのですが、fishにはこれがデフォルトで実装されています。
zshでシンタックスハイライトを有効にしていた時は微妙なラグが気になって外したりしていたのですが、fishのシンタックスハイライトはほとんどラグも発生せずとても実用的です。
設定が簡単
後述するプロンプトのカスタマイズでも触れていますが、configが書きやすく、さらにfish_configを実行するとブラウザ上で主要な設定変更をすることができます。
さらに変更項目にもよりますが、sourceコマンドでconfigの再読込などをしなくても変更が反映されるため、プロンプトのカスタマイズなどが捗ります。
プロンプトをカスタマイズする
設定が簡単
とりあえず、いままでと同じプロンプトを表示させたいと思いfish用に書き換えたのですが、zshに比べると設定がとても書きやすかったです。
ver. zsh
PROMPT="%(?.%{$fg<pre>[code]%}.%{$fg<pre>[code]%})%(?!(%{$fg[magenta]%}๑ %{$fg[white]%}°口°%{$fg[magenta]%}๑%{$fg<pre>[code]%}%)!(๑ °口°๑%))%{${reset_color}%} { "
ver. fish
function fish_prompt
if [ $status -eq 0 ]
set status_face (set_color green)'('(set_color red)'๑'(set_color white)' °口°'(set_color red)'๑'(set_color green)')' (set_color white)'{ '
else
set status_face (set_color blue)'<(;'(set_color white)' °A°'(set_color blue)')> ' (set_color white)'{ '
end
echo $status_face
end
絵文字にしてみた
function fish_prompt
echo \U1F4A9 ' { '
end
うん、これはzshでもできますね。
右プロンプトにも置いてみた
function fish_prompt
echo \U1F4A9 ' { '
end
function fish_right_prompt
set_color green
date +"%H:%M"
echo (set_color white)' }' \U1F4A9' '
end
うん、これもzshでもできますね。
プロンプトを複数行AAにしてみた
function fish_prompt
set unk (set_color a77405)' _人\n ( )\n ('(set_color white)'へ ノ'(set_color a77405)')\nヽ( '(set_color white)'´ 」`'(set_color a77405)')ノ\n ( '(set_color white)'`ー'(set_color a77405)' )'(set_color white)' { '
echo -e $unk
end
うーん、これはfishならでは!
fishのプロンプトは複数で設定することが可能なので、こんなAAを設定することもできます。
また、色指定をset_color a77405のようにhexでできるのもWebエンジニアには馴染み深いのでわかりやすくていいですね。ちなみに右プロンプトは複数行に対応していないようです。
プロンプトに画像を表示してみる
うん、ここまで設定して、「echoで出力しているということは他のコマンドの実行結果を表示することもできるんじゃないか」と気付きました。
そして、「もしかしたらimgcatで画像表示できるんじゃないかしら?」とも思いついてしまったのです。
……ということで、試してみました。
function fish_prompt
set prompt (set_color green)(prompt_pwd)
imgcat $HOME/Desktop/unk.png;
echo (set_color blue) $prompt (set_color green)' > '
end
うん、これもばっちり表示できました。せっかくなので弊社CTOを表示してみましょう。
ついでにiTerm2の背景画像も変更してみました。これが……CTO CLIだ!
うーん、これはご利益のありそうなターミナルになりましたね。運気も上昇していい仕事ができそうですし、給料もあがりそうな予感がします!
まとめ
とういうことで今回は(典型的なミーハーエンジニアっぽくてアレですが……)、とうとう私もzshからfishにのりかえてしまいました、という話でした。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。