トップ «前の日記(2017/04/20 (木) ) 最新 次の日記(2017/04/22 (土) )» 編集 RSS feed

HsbtDiary


2017/04/21 (金) [長年日記]

zsh から fish にした

春というのと MacBook Pro を置き換えたということもあって、この機会にシェルを zsh で引き継ぎ付け足しし続けていた環境から fish を 0 から設定して生きることにした。bash や zsh で読み込んでから fish で、という話もあったけどそれなら bash や zsh でいいじゃないかと思うので、無から fish で環境を作るというのを目的に進める。まずは homebrew で fish をインストール。

$ brew install fish

そもそも fish をわかってないので、ゆるく調べてみると以下のような感じらしい。

  • エンドポイントとなる設定は ~/.foorc などではなく ~/.config/fish/config.fish にかく
  • その他設定や function は ~/.config/fish/functions に入れる
  • ヒストリーファイルは ~/.local/share/fish/fish_history にある

なるほどふむふむという感じで、まずは anyenv を入れようと思ったところ、 *env 系は fish に対応していないものも結構ある、ということなので anyenv を使うのをやめて rbenv のみにして、それ以外は別の手段で versioning management をするなり、そもそもやらないということにした。今のところ php だけ phpbrew で制御するようにした。他は全て homebrew でインストール。

あとはプラグインマネジメントをできるようにすると楽というのを見かけたので fisherman を使うことにした。oh-my-fish じゃないのはネーミングが fisherman の方がかっこいいから、程度の理由です。fisherman では以下のプラグインを入れた。

$ fisher install z fzf decors/fish-ghq

この機会に peco ではなく fzf というのを試してみることにしたのでこれは、homebrew でインストール。

$ brew install fzf

あとは、golang やら rust などの環境変数とパスだけ最小の設定をしてだいたい動くようになった。fish, alias は推奨しないみたいな記述があったけど、さすがに git や atom-beta みたいのを補完で頑張るのは無理だったので git は g, atom-beta は e などだけ alias にした。完成した config.fish はこちらになります。

set -x PATH (brew --prefix coreutils)/libexec/gnubin $PATH

set -x PATH $HOME/.rbenv/bin $PATH
rbenv init - fish | source

set -x PATH $HOME/.cargo/bin $PATH

set -x GOPATH $HOME/.go
set -x PATH $GOPATH/bin $PATH

source $HOME/.phpbrew/phpbrew.fish
source /usr/local/google-cloud-sdk/path.fish.inc

set -x Z_CMD 'j'
set -x Z_DATA $HOME/.z

set -x GIT_MERGE_AUTOEDIT no
set -x EDITOR vim
set -x RUBY_CODESIGN hsbt
set -x HOMEBREW_GITHUB_API_TOKEN xxx

alias git hub
alias g git
alias e atom-beta
alias mk make

cd

最後に cd してるのは google-cloud-sdk の fish 設定を読み込んだらなぜか google-cloud-sdk のディレクトリに移動してしまうので $HOME に戻しています。続いて、プロンプトに git のブランチが出てないと死ぬので下のような内容を fish_prompt.fish として functions の下に置いた。

function fish_prompt
  set_color $fish_color_cwd
  echo -n (prompt_pwd)
  set_color normal
  printf '%s ' (__fish_git_prompt)
  echo -n '> '
end

あと rbenv のバージョンは表示させた方がいいかなという気もするけどあとで。

fish の紹介エントリを眺めていると chsh すると書いてあって、正気かと疑うんだけど、サーバーないし UNIX ライクなシステムで、何かトラブルシューティングしようとしたり、homebrew を purge せざるを得ないみたいな時に確実に死ぬのでやらない方がいいと思う。Terminal.app ならセッションの起動時に使うシェルを chsh とは別に設定できるので、そこで fish を指定するだけで十分なのでそうした。iTerm2 にも似たような設定があったと思う。

最後に extended_history を有効にした状態で作成していた zsh 履歴ファイルを https://gist.github.com/hsbt/b10b3e856d5ca6ef6737504030f47557 みたいなスクリプトで変換して fish_history に mv して終わり。

fish 補完とか、ディレクトリ移動が今っぽくて使ってて面白い感じですね。特に不満もないのでもうしばらく使ってみようと思う。


参考にしたサイト