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 fishchsh -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/fishermanzsh でいうところの zplug 的なやつ。使い勝手的には gem とか bundler っぽい。
fisher ls-remote でインストールできるプラグインの一覧を検索fisher <plugin> でプラグインをインストールzplug 経由で ghq を導入できたが fisherman には対応するものがないので素直に homebrew からインスコする。
brew install ghq fzffish 上から fzf や ghq を操作するプラグインがあるのでよしなにインスコ。
fisher decors/fish-ghq fzffish_update_completionsman コマンドから補完を自動生成してくれるらしい。なにこれやばい。
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 へ移行してみて概ね満足している。