fish shell を使いたい人生だった

fish_console
219件のシェア(すこし話題の記事)

ずっとbashを使っていました。zsh、興味はありましたが、プラグインのための設定を書くのがなんとなく大変そうだという理由で、敬遠していました。そこに fish shell (以下 fish) が手を差し伸べてくれたのです。結論から書くと、bash と同程度の設定ファイルの記述量で、ディレクトリ間の移動やコマンド履歴の呼び出しといった利便性は飛躍的に向上しました。そして見た目が良い。入れて損はありません。

想定読者

  • Mac で bash を使っている方
  • ターミナル環境を良くしたいと思っている方

バージョン情報

ソフトウェア バージョン
fish 2.5.0
fisherman 2.12.0

どこまでやるか

このたぐいの作業、はじめるとキリがありません。調べるうちにさらに便利なツールがどんどん出てくるからです。この記事では「見た目を良くした上で、コマンドラインツールにおけるディレクトリ間の移動やコマンド履歴呼び出しを便利にする」ところまでとします。

  • tmuxは(なんだか大変そうななので)導入していません。今のところ、iTermのウィンドウ分割機能でまかなっています。欲しくなったときに入れようと思います。
  • Git関連はghqと連携してリポジトリへの移動をやりやすくするところまでとしています。ブランチの管理やコミットなどは、私の場合 Tig で行っているためです。

Before and After

beforeandafter

fish shell

これがなければ始まりません。Homebrew で簡単にインストールできます。

$ brew install fish
$ fish -v
fish, version 2.5.0

次に、デフォルトシェルを変更します。

$ sudo vi /etc/shells   #  末尾に /usr/local/bin/fish を追加
$ chsh -s /usr/local/bin/fish  # デフォルトシェルを fish に変更

fisherman

fishのためのプラグインマネージャです。これのおかげで私達が記述する設定ファイルは最小限で済みます。

$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher
$ fisher -v

bobthefish - テーマを変更する

黒背景にマッチするもので、落ち着いた色合いが好みだったのでこのテーマを選択しました。powerlineフォントを利用していますので別途フォントのインストールも必要です。

インストール

$ fisher install omf/theme-bobthefish
$ git clone git@github.com:powerline/fonts.git
$ ./install.sh

iTerm2でのフォント設定

インストールしたフォントをiTermのプロファイルで設定します。

iterm_font

これでiTermの画面がかっこよくなるはずです。テンションあがりますね!

z - 履歴からディレクトリへ移動

訪問履歴からディレクトリ移動候補を表示してくれます。また、z 文字列のように入力すると履歴からマッチするものをさがして補完してくれます。日々使うディレクトリはだいたい決まっていますが、それでも完璧にパスを入力していくのは面倒なものです。あいまいな記憶から移動候補を見つける点で優れています。

fisher install z  # インストール

z

fish-bd - 親ディレクトリへ移動

カレントディレクトリからの親ディレクトリを移動候補として表示してくれます。cd ../../ とはおさらばです。特にアプリケーション開発をしているところ、例えばソースコードを辿っていくと階層が深くなりがちで、そこからプロジェクトルートへ戻る…といったシーンで役に立ちます。

fisher install 0rax/fish-bd

bd

peco + plugin-peco - コマンド実行履歴を選択

絞込機能付きのコマンド履歴選択が可能になります。インストール後、キーバインドの設定が必要です。

brew install peco
fisher oh-my-fish/plugin-peco
function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
end

これで、Ctrl + R コマンド履歴機能を呼び出すことができます。

peco-R

ghq + peco-ghq-plugin - ghqで登録したGitHubリポジトリを選択して移動

ghqはGitのリポジトリ管理ツールです。ユーザディレクトリに git clone して管理しても良いのですが、数が多くなってくると管理負荷が高くなります。ghqでラクをしましょう。fishと組み合わせれば移動も簡単です。なお履歴と同様キーバインドの設定が必要になります。

※ コメントより fish-peco_select_ghq_repository をインストールする手順が不足していることがわかりました。追記済みです。ありがとうございます。

$ brew install ghq
$ fisher install yoshiori/fish-peco_select_ghq_repository

$ ghq get git@github.com:cm-wada-yusuke/angular-websocket-chat.git
$ ghq get git@github.com:cm-wada-yusuke/chatserver-play-websocket-akka-stream.git
function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
  bind \c] peco_select_ghq_repository  # 追加
end

Ctrl + ] でcloneしたリポジトリの移動候補を選択できます。

peco-G

balias

エイリアスを定義した上で、なおかつ登録したエイリアスも他のコマンドと同じように補完できるそうです。そうです、というのは、私が登録しているエイリアスは gitコマンドをgにするくらいだからです。他にいろいろなコマンドをエイリアス登録するようになれば恩恵が大きくなりそうですね。

$ fisher oh-my-fish/plugin-balias
balias g git # キーバインドの下あたりに追記

おまけ

fish_config

なんと設定画面がブラウザで開きます。新参者には非常にありがたい。私はカラー設定をここで変更しました。

fish_config

さいごに

とても便利なツールを開発・提供してくださった開発者の皆様に感謝します。ご覧になっている方々の日々の業務を少しでもスタイリッシュにする助けになれば幸いです。

参考