fish を導入

(last update: 2017/02/21)

少し気になっていたモダンなシェル fish 、実家の兄も使っていていろいろ見せてもらったらやっぱり便利そうだったので導入してみた。

MacPorts でインストール。Homebrew 派の人は $ brew install fish で。

$ sudo port install fish
$ fish_config # ブラウザで設定画面が開く

fish をデフォルトのシェルに設定する。まず fish がインストールされているパスを確認して、 /etc/shells を編集する。その上で、 chsh コマンドで切り替えれば OK

$ which fish # -> /opt/local/bin/fish
$ sudo emacs /etc/shells # 上記 fish のパスを追加
$ chsh -s /opt/local/bin/fish

プラグインのインストール

oh-my-fish のメンテナの方が作っているというプラグインマネージャ fisherman をインストール

$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman

peco 関連のプラグインをインストール。 peco 自体は以前に go get でインストールしていた。

$ fisher omf/plugin-peco
$ fisher yoshiori/fish-peco_select_ghq_repository

fish-peco_select_ghq_repositoryghq で管理しているレポジトリを peco で検索して cd する拡張。 C-r でのヒストリ検索に peco を使うように、ghq のやつは C-o にそれぞれ設定しておく。

function fish_user_key_bindings
  bind \cr peco_select_history
  bind \co peco_select_ghq_repository
end

参考

fish-mode をインストール

Emacs で fish スクリプト(設定)を編集するための fish-mode をインストールする。 ~/.emacs.d/Cask(depends-on "fish-mode") を追加して以下のように実行すれば OK.

$ cd ~/.emacs.d/
$ cask install

設定ファイルは zshbash とはことなり .fishrc ではなく ~/.config/fish/config.fish となる。

PATH の設定

.zshrc とは構文が異なる。以下のような感じ。

# PATH
set -x PATH /opt/local/bin /opt/local/sbin $PATH
set -x PATH $HOME/bin $HOME/.cask/bin $HOME/py35/bin $PATH

# Go
set -x GOROOT (go env GOROOT)
set -x GOPATH $HOME/go
set -x PATH $GOPATH/bin $GOROOT/bin $PATH

# nodebrew
set -x PATH $HOME/.nodebrew/current/bin $PATH

alias の設定など

alias は zsh と同じ書式でもいけるという話もあったかもしれない。

# alias
alias rm "rm -i"
alias cp "cp -i"
alias mv "mv -i"
alias mkdir "mkdir -p"

alias find "gfind"
alias xargs "gxargs"

# alias for git
alias gst "git status"
alias gdif "git diff"
alias gdifc "git diff --cached"

# alias for Mac
alias ql "qlmanage -p $argv[1]"

# user defined functions
function cd
  builtin cd $argv
  ls -a
end

function fish_user_key_bindings
  bind \cr peco_select_history
end

補完候補の拡充

以下のコマンドで man などから補完候補を追加してくれるそうな。頼もしい話である。

$ fish_update_completions

現時点の config.fish