zsh から fish (shell) へお引っ越しを試みた話
fish との出会い
これは本当に偶然の出会いで、 「『大きなスクリーンにソースコードを映して、周囲からいろいろヤジ飛ばされながら、ナビゲーターとドライバーとでペアプロする』あのあれ、なんだったかな?確か頭の方が"fish"みたいな音じゃなかったかな?」と音を頼りに
「fish プログラミング」
というキーワードで検索したところ、fish shell がヒットしたのであった。
仕事用もプレイベート用Macもzshを設定していて、個人的にはそれなりに満足していたのですが、色々zshにインストールしていたこともあって、起動やキー入力に若干もたつきを感じていたのもalternative factでしたので、ちょっと試してみようかなと思ったのが始まりです。
fishとは
fish のfishは Friendly interactive shell の略でユーザフレンドリーさを売りにしたUNIX shellとのことです。どのあたりがユーザーフレンドリーか、というとざっと以下のようです。
- コマンドのautocompleteやシンタックスハイライト
- web上でカラーチョイスができるカラフルなターミナル
- 健全でシンプルな文法(bash等とは若干違うらしい)
- manページの自動生成と親切なヘルプメッセージ
もちろん、以前使用していたzshでも.zshrcに設定を入れたり、プラグインやテーマをインストールすることで自分好みの使いやすいターミナルに仕上げることができます。
セットアップ手順
fishのインストール
Homebrewを使用してfishをインストールします。 (これ以外にもMacportsやインストーラー、Windows版、tarboll等様々サポートしていますので公式サイトを確認してください)
brew install fish
デフォルトのシェル切り替え
/etc/shells
を確認すると、使用可能なshellを確認できます。
cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
今のままでは fish
は使用できませんので末尾に1行fishのパスを追記しましょう。
which fish
/usr/local/bin/fish #これを/etc/shellsに追記
以下のコマンドでターミナル起動時のログインシェルをfishに切り替えることができます。
chsh -s /usr/local/bin/fish
ターミナルを再起動する
ターミナルを再起動することでシェルが切り替わっていることを確認できます。 個人的にはもう少しカラフルでかっこよくしたいのでプラグインを入れる方法を模索します。
fisherman でpluginをインストールする
fishの場合、fisherman がplugin managerとして利用可能なようですので、こちらをインストールして拡張していきましょう。
fisherman のインストール
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher
プラグインのインストール
まずはプロンプトのテーマをインストールします。今回はjokerのテーマをインストールしてみます。
fisher joker
powerlineのインストール
私のmacではjokerのテーマで使用しているpowerlineをまだインストールしていなかったため、jokerのREADMEに添付されている画像のようなデザインになりませんでした。そのため、別途powerlineをインストールします。
fonts のインストール
加えてfontsも別途インストールしなくてはいけないようです。(やること増えてきてしまった。。。) fontsのインストール手順 を参考にインストールするとpip を使用する方法が紹介されていて微妙なので、gitリポジトリ からcloneしてきてシェルでフォントを一括でインストールします。
git clone https://github.com/powerline/fonts
sh ./install.sh
iTerm2(ターミナル)の設定
iTerm2でインストールしたフォントが利用できるように設定をします。 [Preference] > [Profile]メニュー > [Text]タブ > [Font]と[Non-ASCII Font] の双方で「Change Font」を選択します。 [All Fonts ] > [Source Code Pro for Powerline] を選択します。
やっとpowerlineが出ました。。 補間も効くみたいですね。
あとは.zshrcで記載しているPATHのexportやコマンドのailasを ~/.config/fish/config.fish に転記しましょう。
起動時のconfigファイルを書き換える
.zshrc にものすごいたくさん書いていた私の場合、このお引越が一番時間かかりました。。 fish起動時にconfig.fishを読み込んで、変数のexportやaliasの登録をしたい場合には以下のような書き換えが必要です。
export
- zshの場合
export ANT_HOME=/usr/bin/apache-ant-1.9.4
- fishの場合
set -x ANT_HOME /usr/bin/apache-ant-1.9.4
コマンドのalias
- zshの場合
alias la='ls -a'
- fishの場合
alias la='ls -a' function la ls -a $argv end
aliasの登録がかなり面倒な感じになってしまっていますね。
おまけ: bashを使えるようにする
fishの場合、bashとは文法が異なるため
bash hoge.sh
のように実行する必要があるため、少々不便です。そのため、fishでもbashのシェルが実行できるよう、プラグインを入れてあげる必要があります。
fisher edc/bass
まとめ
- fishはユーザーに優しいインターフェースを提供している(?)
- 実はzshでも同じプロンプトのデザインを提供しているケースもあるので見た目自体にはzshとの大きな差別化は図れていない。
- autocompleteはzshよりも少し便利かなという印象
- fishのconfigファイルは.zshrcや.bashrcと文法的な互換性がないので抵抗感がある
- 慣れなのかもしれないが、正直ここに時間をかけたくない
- fish の場合、コマンド履歴に対する操作がちょっと弱い
! ${履歴番号}
でコマンド再実行ができないみたい。(個人的には重宝していたのに。。)- history コマンドでそもそも履歴の番号表示されないですし。。
しばらくはプライベートはfish、仕事はzshで行こうと思いました。