yoshiori.github.io

Zsh から Fish にした。

3ヶ月くらい前からシェルを fish にしてみてるので、適当に設定など共有。

先に行っておくけど zsh より良い所とか聞かれても知らない。 気分転換&頭の体操で zsh のカスタマイズの延長くらいの気分で乗り換えた。

インスコ

1
$ brew install fish

以上

oh-my-fish インスコ

fish-shell の良い所は特に設定などをしなくてもユーザーフレンドリーであることです。 zsh のように oh-my-zsh などを入れたり、過度にカスタマイズをしなくて済みます。

とかそういう説明がされてるのにその利点を一気にぶち壊す oh-my-fish というのがあるので入れる

1
$ curl -L https://github.com/oh-my-fish/oh-my-fish/raw/master/bin/install | fish

そうすると omf コマンドが使えるようになる。 これ、パッケージ管理的な機能が便利なので入れておくと楽。

テーマとかプラグインとかが

1
$ omf install rbenv

とかで出来る。 git リポジトリから直とかも

1
$ omf install https://github.com/yoshiori/fish-peco_select_zsh_history

で出来る。 で、Gemfile 的なのが ~/.config/omf/bundle に出来るのでそこに書いて omf install とかで一括で入れたりも出来る。

入れたもののアップデートも omf update とかで一気に出来て便利〜

peco まわり

移行できた最大の理由がコレで大体最近は peco 使ってコマンド実行とリポジトリの移動をしていたのですんなり移行できた。

履歴の peco

標準の peco プラグインは入力途中の値を引き継いでくれないのでパッチ当ててる( PR 投げ済み)

ghq で peco

ghq を peco るのは作ったので

1
$ omf install https://github.com/yoshiori/fish-peco_select_ghq_repository

でインスコできる

zsh の history 資産を使いたい

最初、zhistory をコンバートしようとしたんだけど paths とか && とか環境変数とか色々面倒くさいので、そのまま zhistory ファイルを peco れるようにした

これも

1
$ omf install https://github.com/yoshiori/fish-peco_select_zsh_history

でインストールできるので後は

1
set ZSH_HISTORY_FILE /home/yoshiori/.zhistory

とかでファイルの場所指定してやれば良い

コマンドハマりどころ

&& で実行系

1
$ brew update && brew upgrade

みたいなのをやりたいときは

1
$ brew update; and brew upgrade

みたいに ; で区切って and でつなげる

一次変数系

で、よくやる一時的な変数を上記みたいに

1
$ set -lx HOGE test; printenv HOGE

ってやるとはまるので注意。 スコープが実行中のプロセスになってしまうので

1
2
3
4
5
6
7
$ set HOGE foo
$ printenv HOGE
foo
$ set -lx HOGE bar; printenv HOGE
bar
$ printenv HOGE
bar

みたいに上書きされちゃう。 なので begin end で囲う

1
2
3
4
5
6
7
$  set HOGE foo
$  printenv HOGE
foo
$  begin set -lx HOGE bar; printenv HOGE; end
bar
$  printenv HOGE
foo

これ、間違えると何が辛いって

1
$  set -lx RAILS_ENV production; rails c

とかやった後 rspec とか実行しちゃうと……あとはわかるな?

俺の config.fish ファイル

そんなこんなで俺の設定ファイルです。

二箇所説明しておくと

未だに cd で移動した後に ls してほしいので

1
2
3
4
function cd
  builtin cd $argv
  ls -la
end

peco の表示は bottom-up にしておくと目線の移動が少ないので

1
2
3
function peco
  command peco --layout=bottom-up $argv
end

全部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Path to Oh My Fish install.
set -gx OMF_PATH $HOME/.local/share/omf

# Customize Oh My Fish configuration path.
#set -gx OMF_CONFIG /Users/yoshiori-shoji/.config/omf

# Load oh-my-fish configuration.
source $OMF_PATH/init.fish

# PATH
set -gx PATH $HOME/bin  /usr/local/bin /usr/local/opt/rbenv/shims $PATH

# homebrew
set -gx HOMEBREW_GITHUB_API_TOKEN xxxxxxxxxx

# ghq
set -gx GOPATH $HOME

# gem-src
set -gx GEMSRC_USE_GHQ 1
set -gx GEMSRC_CLONE_ROOT $HOME/src

# rbenv
set -gx RBENV_ROOT /usr/local/opt/rbenv

# Bundler
set -gx BUNDLE_JOBS 7

# Java
set -gx JAVA_TOOL_OPTIONS -Dfile.encoding=UTF-8

set ZSH_HISTORY_FILE $HOME/.zsh/log/.zhistory

function fish_user_key_bindings
  bind \c] peco_select_ghq_repository
  bind \ct peco_select_zsh_history
  bind \cr peco_select_history
end

function cd
  builtin cd $argv
  ls -la
end

function peco
  command peco --layout=bottom-up $argv
end

去年エディタの乗り換えに成功したので、今年はシェルの乗り換えに挑戦してみたけど結構行けそう。 というのも、大体の行動が peco に依存しているのでそれの移植さえ終われば使い勝手そんなに変わらない。

Comments