はじめに
この記事は Sansanアドベントカレンダー 5日目です。
今日のお話
shell は、かれこれ 10 年くらい zsh を使っているのですが、今年の夏くらいに fish にしてみました。
3 ヶ月程で結局 zsh に戻ってしまったのですが(理由は後述)、今回は備忘録を兼ねてやってみたことをまとめてみようと思います。
oh-my-fish
いきなりですが oh-my-fish というのがあるので入れてみます。
こいつを入れると omf
というコマンドが使え、プラグインを管理することができます。
omf install XXX
でプラグインをインストールすることができます。テーマは omf theme YYY
。
また、omf list
とするとインストールしたプラグインが確認できます。
私は以下のプラグインをインストールしてみました。
⋊> ~ omf list
Plugins
brew omf
bundler osx
fish-peco_select_ghq_repository pbcopy
fish-peco_select_zsh_history peco
fish-spec rbenv
gem
Themes
default yimmy
fish_config
あと面白いのは、以下のコマンドでブラウザが立ち上がりそこで設定とかができることです。
⋊> ~ fish_config
こんな画面で設定することができます。
Theme の変更や設定している function の確認など色々できます。
引っ掛かりポイント
bash や zsh と違って、例えば以下のように環境変数を与えてコマンドを実行する場合は env
が必要です。
⋊> ~ env RAILS_ENV=test bin/rake db:create
設定
ここまで設定すれば他には特になにもしなくても十分使えましたが、CTRL-j を押したときに ls と git status を表示するようにしたかったので、それは以前 こちらの記事 にまとめています。
また bundle show
を peco
に食わせて bundle open
できるようにしたかったので、以下の function を定義しました。
function peco_bundle_open
set -l query (commandline)
if test -n $query
set peco_flags --query "$query"
end
bundle show 2> /dev/null | sed -e '/^ \*/!d; s/^ \* \([^ ]*\) .*/\1/' | peco $peco_flags | read line
if test -n $line
echo $line
commandline "bundle open $line"
end
end
config.fish はこんな感じになりました。
# Path to Oh My Fish install.
set -q XDG_DATA_HOME
and set -gx OMF_PATH "$XDG_DATA_HOME/omf"
or set -gx OMF_PATH "$HOME/.local/share/omf"
# Customize Oh My Fish configuration path.
set -gx OMF_CONFIG "$HOME/.config/omf"
# Load oh-my-fish configuration.
source $OMF_PATH/init.fish
set -Ux GOPATH $HOME/workspace/go
set -U fish_user_paths $fish_user_paths $GOPATH/bin
set -Ux LC_ALL ja_JP.UTF-8
set -Ux EDITOR 'emacsclient -n'
alias mv 'mv -i'
alias cp 'cp -i'
alias rm 'rm -i'
alias g git
eval (hub alias -s)
function fish_user_key_bindings
bind \c] peco_select_ghq_repository
bind \ct peco_select_zsh_history
bind \cr peco_select_history
bind \cj do_enter
bind \co peco_bundle_open
end
使ってみて
3 ヶ月程使ってみたのですが、zsh だと SAVEHIST
で履歴の件数が指定できたのですが、fish でどうやるかよくわからず zsh に戻ってしまいました
てな感じで結局使わなくなってしまったわけですが、fish は特に設定しなくても補完機能など強力な機能があり、乗り換えは結構すんなりできるんじゃないかと思いました