PengNote

勉強した事や行った場所の感想を書くブログ

Macで使うデフォルトのshellをfishに変更した

実は昨年12月中に変えていたのですが、書くのを忘れていたなと思って書き初め。

経緯

結論から言えばノリです。

これまでデフォルトのシェルは、補完が強くて便利って話を聞いてzshを使っていた。 preztoでテーマを当てたり設定加えて色々書いていたんだけど、カスタマイズを色々いじっていくのがめんどくさいのと、ちょっと重い気がしてた。
そんな中、会社で一緒に働いてる人がfishを使っていて(というか僕以外全員)、ちょっと触ってみたら補完の感じが好きだったので変えてみた。

あと、ちょうど回ってきたこの記事を読んでやってみようと思った。
zshからfishにして1年が経ちました

fishの良いところ

  • 協力な補完機能
    • 履歴からはもちろん、manページを解析してオプションとかの候補も出してくれる!
  • シンタックスハイライト
  • 使えないコマンドは赤く表示される!
  • 起動が早い(zshと比べて)
  • カラフルできれい

色は別にいいんだけど、オプションの補完が割といい気がする。

fishの悪いところ

fish使ってて困ったことは以下の1点のみです

その他のShellと構文が違うので、スクリプトのコピペでコマンドを実行できないことがある

前導入しようとして挫折したのはこれ。 各種自分で通したPATHとかを修正しないといけなかったり、新たに追加するときに調整しないといけない。

Macへのfishの導入

fish自体は最初から入ってないのでHomebrewでインストールする。

$ brew install fish
# 変更
$ chsh -s /usr/local/bin/fish

# 確認
$ echo $SHELL
/usr/local/bin/fish

この時点で補完も出来るようになってるし、結構便利な状態。

もっと便利にするプラグインを入れる

fishをもっと便利に扱うためにプラグインを導入する。その上で管理に便利なfishermanというプラグインマネージャーを入れる。
oh-my-fishっていうツールもあったんだけど、こっちでテーマも管理できるのでこっちでやる方が楽。

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

fisherコマンドが使えるようになる。詳しい使い方はREADMEを参照。

とりあえず入れたプラグイン

fish プラグイン名 でインストールできる。

  • fisherman/docker-completion
    Dockerコマンドの補完を強化
  • fisherman/z 指定のディレクトリに一気に移動できる。ディレクトリ名だけ覚えてて、パスを覚えてないときとか便利かも
  • fisherman/fzf 補完をかけるときに候補を並べてくれて、ファイル検索や実行コマンド検索ができるようになる。

promptのテーマは、ここから選ぶことができる。 oh-my-fish/oh-my-fish / docs/Themes.md - github

色々みたんだけど、シンプルなのがいいなと思ったので、zshのときも使っていた、pureにした。

ちなみに、promptの設定は、~/.config/fish/functions/fish_prompt.fishに書くと読み込んでくれる。

設定ファイルの作成

特にいじらなくても十分使えるけど、ちょっとカスタマイズしたり、各種ツールのPATHを通したりするのに設定ファイルを書くことができる。

~/.config/fish/config.fishを用意して、ここに記述すると反映してくれる。

aliasなんかのファイルを分けておいて、config.fishにPATHを書くと読み込んでくれるらしい

. ~/.config/fish/env.fish
. ~/.config/fish/aliases.fish
. ~/.config/fish/Keybinds.fish

まとめ

  • zshよりも簡単にいい環境を作ることができる
  • 補完はめっちゃつよい
  • fishermanを入れると色んな便利ツールが入れられる
  • PATHの書き方なんかが変わるのだけネック

zshでゴリゴリカスタマイズしてないならこっちの方が楽