Macで使うデフォルトのshellをfishに変更した
実は昨年12月中に変えていたのですが、書くのを忘れていたなと思って書き初め。
経緯
結論から言えばノリです。
これまでデフォルトのシェルは、補完が強くて便利って話を聞いてzshを使っていた。
preztoでテーマを当てたり設定加えて色々書いていたんだけど、カスタマイズを色々いじっていくのがめんどくさいのと、ちょっと重い気がしてた。
そんな中、会社で一緒に働いてる人がfishを使っていて(というか僕以外全員)、ちょっと触ってみたら補完の感じが好きだったので変えてみた。
あと、ちょうど回ってきたこの記事を読んでやってみようと思った。
zshからfishにして1年が経ちました
fishの良いところ
- 協力な補完機能
- 履歴からはもちろん、manページを解析してオプションとかの候補も出してくれる!
- シンタックスハイライト
- 使えないコマンドは赤く表示される!
- 起動が早い(zshと比べて)
- カラフルできれい
色は別にいいんだけど、オプションの補完が割といい気がする。
fishの悪いところ
fish使ってて困ったことは以下の1点のみです
その他のShellと構文が違うので、スクリプトのコピペでコマンドを実行できないことがある
前導入しようとして挫折したのはこれ。
各種自分で通したPATHとかを修正しないといけなかったり、新たに追加するときに調整しないといけない。
Macへのfishの導入
bashやzshとは違って、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
下記追記内の質問でも触れられているため、ぜひ参考にしてください。
追記: bash の記法をfishで使えるようにする
Twitterで、「teratail で質問されてませんかー」なメッセージを頂いたので、念の為追記です。
@skd_nw こんにちは。teratailで「bashの記法をfishでつかえるようにしたい」という質問( https://t.co/JVnvij9bB3 )を偶然発見したのですが、これは skd_nw さんが投稿されたものでしょうか? bassというfishプラグインがありまして、これを使用すれば解決できる可能性があります。
— 君継 葭月 (@JiaYue) January 23, 2019
質問はこちら。
bashの記法をfishでつかえるようにしたい。 - teratail
折角教えていただいたのですが、残念ながら質問したのは僕ではなかったので、サービスの方で対応方法の回答を書き込んでいただきました。気になる方は一度上記質問を覗いてみてください。
Bass Make Bash utilities usable in Fish shell - github
まとめ
- zshよりも簡単にいい環境を作ることができる
- 補完はめっちゃつよい
- fishermanを入れると色んな便利ツールが入れられる
- PATHの書き方なんかが変わるのだけネック
zshでゴリゴリカスタマイズしてないならこっちの方が楽