こんにちは、ソリューションの五十嵐です。
ログインShellとしてzshを使用しているのですがイマイチzshを使いこなせておらず、bashと比べても作業効率が良くなっているようには思えませんでした。
そんな中fishの記事を拝見して興味を持ったので試してみました。
ちなみにGoogleでfishについて調べるとfishがなんとなく良いものだとわかります。
インストール
私はMac環境ですのでHomebrewでインストールします。
$ brew install fish
ログインShellに設定できるように/etc/shells
の末尾に/usr/local/bin/fish
を追加します。
$ sudo vi /etc/shells
/usr/local/bin/fish
以下のコマンドでログインShellに設定します。
$ chsh -s /usr/local/bin/fish
ターミナルを開いてfishになっていればOKです。
プラグイン管理
プラグイン管理のためFishermanをインストールします。
$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs https://git.io/fisher
他にoh-my-fishというプラグインマネージャもありましたが、zshの時に使用していたoh-my-zshがイマイチ使いこなせていなかったので似た名前のこちらは選択肢から外しました。
oh-my-zshとの関係性は無いと思いますが名前が受け付けなかったので。。。
テーマ変更
デフォルトでも良いのですがせっかくなのでテーマを変更します。 テーマは以下のページから選びましょう。
https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md
選んだテーマをfishermanでインストールします。
$ fisher add oh-my-fish/theme-bobthefish
デフォルトでPowerlineフォントが有効になっているので以下のように表示が崩れます。
Powerlineフォントをインストールしても良いのですが元々使用していたRictyフォントを使用したかったのでPowerlineフォントを無効にします。
$ set -g theme_powerline_fonts no
このままでは再起動時に元にもどってしまうので.config/fish/fish_configに追加しましょう。
fish_configが存在しない場合には作成してください。
テーマについては以下のコマンドを実行することでブラウザから変更することもできます。
$ fish_config
使用感
fishはコマンド入力中に履歴から補完してくれる機能があります。
試しに以下のような階層ディレクトリに対してcdコマンドを実行してみます。
$ tree images/
images/
└── 2019
└── 05
├── 13
├── 14
├── 15
├── 16
├── 17
├── 18
└── 19
cdのパスに対しての補完でしたがコマンドのオプションなども補完してくれるので以下のようにdockerコマンドのオプションも補完してくれます。
dockerコマンドにシンタックスハイライトが効いているのもポイントですね。
このシンタックスハイライトは以下のようにコマンドが正しいかどうか実行前に判断することができます。
まとめ
実際にfishを使ってみてかなり良い印象を受けました。
bashやzshよりも情報が少ないので設定でつまづくかな、と思ったのですがそもそも設定しなくても使えるほど優秀なので杞憂でした。
POSIX互換が無いというところで問題なることがあるかもしれませんがzshよりは使いやすい印象ですので、しばらくはfishをログインShellとして使ってみようと思います。