June 25, 2018
即落ち2コマ並のノリで zsh から fish に寝返ろうとしている😇
— cheezenaan (@cheezenaan) 2018年6月24日
はぁ〜〜〜〜 fish 最高すぎか〜〜〜〜〜〜〜〜〜✌
— cheezenaan (@cheezenaan) 2018年6月25日
2年くらいかけて zsh で作ってきた環境が1時間ちょいで fish 上でできた && 設定ファイルめっちゃ減った && シェルの起動時間が当社比で8割カットになった
— cheezenaan (@cheezenaan) 2018年6月25日
控えめに言って最高でした。
Introduce fish by cheezenaan · Pull Request #5 · cheezenaan/dotfiles
コミットを追っていってください :pray:
平成生まれの非 POSIX シェル。 Friendly Interactive SHell の略称らしい。
bash
や zsh
とは異なり、オートコンプリートなどの便利機能が設定不要でいきなり使えることが大きな特徴。
brew install fish
chsh -s
でログインシェルにはせずにターミナル側でよしなに fish
を呼び出してやる。 iTerm2 の場合は Preferences > General > Command
から /usr/local/bin/fish
を指定してやれば OK。
$HOME/.config/fish/config.fish
に記述する。ターミナル上から fish_config
と入力すると Web ブラウザ上から fish の設定を変更できる。
jorgebucaran/fisher: A package manager for the fish shell
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman
zsh
でいうところの zplug
的なやつ。使い勝手的には gem
とか bundler
っぽい。
fisher ls-remote
でインストールできるプラグインの一覧を検索fisher <plugin>
でプラグインをインストールzplug 経由で ghq を導入できたが fisherman には対応するものがないので素直に homebrew からインスコする。
brew install ghq fzf
fish 上から fzf や ghq を操作するプラグインがあるのでよしなにインスコ。
fisher decors/fish-ghq fzf
fish_update_completions
man
コマンドから補完を自動生成してくれるらしい。なにこれやばい。
bash や zsh で export PATH=/usr/local/bin:$PATH
としていたのを set -x PATH /usr/local/bin $PATH
と変更していく。
環境変数の定義をしていくと、セッションを呼び出すたびに PATH
がどんどん長くなる問題にぶち当たった。
set -x
の使い方に問題があったので、 fish.config
の末尾にこんなワンライナーを付け足して解消した。
# ./config/fish/config.fish
# Remove redundant paths
set -x PATH (echo $PATH | tr ' ' '\n' | sort -u)
スペース区切りで並んだ $PATH
から sort -u
で重複を削除している。
zsh
で使用していたエイリアス集を別ファイルから読み込ませた。alias foo='bar'
が alias foo 'bar'
となっただけで瞬殺で移行できた。
reattach-to-user-namespace で使用するシェルを fish
に変更する。
# ~/.tmux.conf
# ...
set-option -g default-command "reattach-to-user-namespace -l $(which fish)"
$ for i in (seq 1 5) ; time fish -ic exit ; end
0.12 real 0.08 user 0.04 sys
0.11 real 0.08 user 0.03 sys
0.11 real 0.07 user 0.04 sys
0.11 real 0.07 user 0.03 sys
0.11 real 0.08 user 0.04 sys
な ん で す か 、 こ れ 。
今までの努力はなんだったのか。
手持ちの設定ファイルの量にもよるけど、シュッとデフォルト設定のまま試してみてよさそうなら移行を考えてもいいのでは。自分の場合はそこまでがっつりカスタマイズして zsh
固有のなにかを使ってたわけでもないし、とりあえず ghq
と fzf
が気持ちよく使えればよかったので、今回を機に fish
へ移行してみて概ね満足している。