fish shellはじめました
これは(ターミナル開発環境のメンテに疲れた|zshの設定に挫折した)人向けにfish shellをオススメする記事です。
自分がzshで手放せなかった機能達
- プラグインマネージャ・・・zgenを使っていました
- テーマ・・・pureというシンプルなテーマを使っていました
- ディレクトリ移動・・・zで、一度cdしたディレクトリを記録して、次からはファジーな感じで移動できるようにしていました
- 補完・・・zshの補完機能 + auto-fuで、いい感じに勝手に補完してくれるようにしていました
- Ctrl + R で履歴検索・・・peco + 設定ファイルを書いて使っていました
- Ctrl + Gでリポジトリにジャンプ・・・peco + ghq + 設定ファイルを書いて使っていました。
これらを、なるべく設定せずにfishで使えるようにしてみます。
zshだと、この辺のツールの導入はちょっと手間ですが、fishなら瞬殺です!
もろもろインストール&開発環境構築
実は、以下3つのコマンドを打てば設定なしでも上記の機能が一通り動きます。
# fish shellとfzfを入れる brew install fish fzf # プラグインマネージャのfishermanを入れる curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher # fishermanでもろもろプラグインを入れる fisher install z fzf decors/fish-ghq rafaelrinaldi/pure
なんということでしょう。
これなら、休日の疲れた状態(今の私)でも問題なく環境構築できますね!
上記でインストールしたモノの補足
プラグインマネージャ
fishermanというfish用のプラグインマネージャを入れました。
ちょっと前まではoh-my-fishがオススメという記事もありますが、最近はコチラを推奨している記事が多い気がします。
テーマ
https://github.com/fisherman とか oh-my-fish/Themes.md at master · oh-my-fish/oh-my-fish · GitHub を探せばいっぱいあります。
ディレクトリ移動
zがfisherman公式リポジトリにあったので、そのまま入れました。
なお、後述しますが、zsh時代の設定に合わせるために、自分の場合は設定ファイルに2つほど記述を足しました。
set -U Z_CMD "j" set -U Z_DATA "$HOME/.z/.z"
補完
補完系はfishのデフォルトで十分便利なので、auto-fuはやめました。
Ctrl + R で履歴検索
pecoにこだわりはなかったので、全く設定なしで動くという理由でpeco同等のfzfにしました。
fisher install fzf
だけで使えるようになります。
Ctrl + Gでリポジトリを検索&ジャンプ
fisher install decors/fish-ghq
だけで、使えるようになります。
その他補足
~/.zshrc的な設定ファイルは?
~/.config/fish/config.fish
に設定します。
fishの文法がbash/zshと全然違う!
そうなんです。
ちょっと独特。
Shell Translation Dictionary · fish-shell/fish-shell Wiki · GitHub
にbashの文法との対比表があるので、見比べながら書いたらよいかも。
↓設定に必要なものだけ書いておきます。
PATHの設定
export PATH=/usr/local/bin:$PATH
をどうするか?ですが、
~set -x PATH /usr/local/bin $PATH
で大丈夫そう。~
追記: fish v3.2からは fish_add_path
を使うのが良いです。重複を排除して追記してくれます。
http://fishshell.com/docs/current/cmds/fish_add_path.html
aliasの設定
alias rm='rm -i'
はalias rm 'rm -i'
みたいな感じでいけます。
最終的な ~/.config/fish/config.fish
あってるか自信ないですが、いちおう動いたので、一旦これで。 https://github.com/yukidarake/dotfiles/blob/master/.config/fish/config.fish
あとがき
私は、これまでzsh + tmux + vimという感じで開発してきて、zshとかターミナル開発環境の知見をコツコツ蓄えてきました。
が、今はWindowsでジャヴァジャヴァしている関係でzshとかターミナル開発環境を整備する意欲がなくなってしまいました。
そんな折、Windows/MSYS2環境でbashが非力で辛いし、zshちゃんと動かんし、じゃあfishどうだろう?と導入してみたところ、えらく気に入ってしまったので、家のMacにも入れました。
この記事を読んでピンと来た人、ぜひ一度fishをお試しください。
(またconfig.fishの書き方に自信がないので、経験者の方、アドバイスあれば、ぜひ教えてください)