zshにpeco + ghqを導入したメモ


流行りからだいぶ遅れた感あるが、peco + ghqをMacに導入したのでメモっとく。

インストール

homebrewでインストール。

$ brew tap peco/peco
$ brew install peco

$ brew tap motemen/ghq
$ brew install ghq

設定

GOPATH

$HOMEに設定してある。

~/.zshrc
export GOPATH=/User/Yusuke

go getしたら~/src以下にライブラリとか入ってく。

ghqのパス設定

GOPATHと揃える。

$ git config --global ghq.root ~/src
~/.gitconfig
[ghq]
  root = /Users/Yusuke/src

これで、ghq get <Githubのレポジトリ>で、~/src/github.com/以下にレポジトリがクローンされる。
例えば、ghq get https://github.com/rails/railsをすると、~/src/github.com/rails/rails/という感じでディレクトリができる。

pecoを使ったコマンド

コマンド履歴を出して検索・絞り込みするやつ

~/.oh-my-zsh/custom/my.zsh
setopt hist_ignore_all_dups

function peco_select_history() {
  local tac
  if which tac > /dev/null; then
    tac="tac"
  else
    tac="tail -r"
  fi
  BUFFER=$(fc -l -n 1 | eval $tac | peco --query "$LBUFFER")
  CURSOR=$#BUFFER
  zle clear-screen
}
zle -N peco_select_history
bindkey '^r' peco_select_history

これで、Ctrl + rでコマンド履歴の補完候補がズラッと出る。インクリメンタルサーチ可能。1行目は同じコマンドを出さない設定。

ghqでクローンしてきたレポジトリへの移動が捗るやつ

ghq listで、ghqでクローンしてきたレポジトリのパスが一覧で出る。これをパイプでpecoに渡すと、レポジトリ名でインクリメンタルサーチできるので利用。

~/.oh-my-zsh/custom/my.zsh
function peco-src () {
  local selected_dir=$(ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-src
bindkey '^]' peco-src

Ctrl + ]でghq管理下のレポジトリの補完候補が出るので、選択すれば一発で飛べる。

設定ファイルが汚くなるので、peco関連の設定はまとめて別ファイルに移すのが良さげ。。

pecoのキーマップ

~/.config/peco/config.jsonにキーマップやstyleの設定を書いておける。

~/.config/peco/config.json
{
  "Keymap": {
    "M-v": "peco.ScrollPageUp",
    "C-v": "peco.ScrollPageDown"
  },
  "Style": {
    "Selected": ["underline", "on_green", "black"],
    "Query": ["red", "underline"]
  }
}

おわり

そういうわけで、レポジトリの管理は~/src以下で行うことにしてみました。