なっく日報

技術やら生活やらのメモ

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 を探せばいっぱいあります。

自分はzshのときと合わせてpureにしました。

ディレクトリ移動

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の書き方に自信がないので、経験者の方、アドバイスあれば、ぜひ教えてください)