ghq/peco/hubを組み合わせてローカル・リモートリポジトリに即座にたどり着く
はじめに
あまりにも有名な下記ツールを組み合わせて、ストレスなく、リポジトリにたどり着くような設定にしたのでまとめておきます。
あまりにも有名なので、ツールの説明は割愛します。が、ざっくりいうと、
Go製のリポジトリ管理ツール
github.com
同じくGo製の使い勝手のいいフィルタリングツール
github.com
GitHubをCLIで操作するツール
github.com
ですw
ローカル編
ローカルにcloneしたリポジトリを一覧して選択したリポジトリに移動する 操作を素早く行えるようにしています。
zshだとこんな感じの設定になります。
function peco-src () { local selected_dir=$(ghq list -p | peco --query "$LBUFFER") if [ -n "$selected_dir" ]; then BUFFER="cd ${selected_dir}" # pecoで選択中, Enter を押した瞬間に実行する zle accept-line fi zle clear-screen } # 関数をウィジェットに登録 zle -N peco-src bindkey '^]' peco-src
"ghq list -p" で、"ghq get"でローカルにクローンしたリポジトリ一覧を表示します。
パイプでつないだ'peco --query "$LBUFFER"'で、その一覧をpecoのコンソールに表示させます。
このようなやり方は、他のQiitaの記事でも紹介されている(というかほぼパクリ)ので、目新しいことはありません。
リモート編
リモートリポジトリを一覧し、選択したリポジトリをブラウザで表示します。
下記は、先程のローカル用の関数をカスタマイズして作成した関数です。
function peco-src-remote () { local selected_repo=$(ghq list -p | peco --query "$LBUFFER" | rev | cut -d "/" -f -2 | rev) echo $selected_repo if [ -n "$selected_repo" ]; then BUFFER="hub browse ${selected_repo}" zle accept-line fi zle clear-screen } zle -N peco-src-remote bindkey '^^' peco-src-remote
解説
hubツールに"browse"というコマンドを使って、リモートのリポジトリページをブラウザで開くことができます。
$ hub browse [ユーザ名/リポジトリ名]
なので、下記のようなローカルリポジトリのパス文字列を分解して"hub browse"に渡すということをしたいとおもいます。
$ /Users/kitakitabauer/.ghq/github.com/ユーザ名/リポジトリ名
しかし、$GOPATHやghqのルートによって、パス階層がどのぐらいになるのかわからないので、渡す文字列を固定で切り出すことがめんどくさそうです。
- /Users/kitakitabauer/.ghq/github.com/kitakitabauer/dotfiles
- /Users/kitakitabauer/go/src/github.com/kitakitabauer/dotfiles
- /Users/kitakitabauer/go/src/bitbucket.org/kitakitabauer/dotfiles
自分は以前の記事でご紹介しましたが、".ghq" や "go/src" のように、cloneするディレクトリを分けているので、単純に前者と後者で階層に1つ差が生まれます。
そこで、今回の記事のポイントなのですが、汎用的に"hub browse"に渡したい文字列を整形できるようにしました。
ポイントは下記の部分です。
rev | cut -d "/" -f -2 | rev
1. rev で文字列をひっくり返す
名リトジポリ/名ザーユ/moc.buhtig/qhg./reuabatikatik/sresU/
2. cut -d "/" -f -2 で、スラッシュ区切りで先頭から2フィールド目までを取り出す
名リトジポリ/名ザーユ
3. rev で再び逆にして、ユーザ名/リポジトリ名の順番に戻す
ユーザ名/リポジトリ名
最後に作成した関数を"bindkey"コマンドで、割当がないキーにあてることで一発呼び出しができます。
bindkey '^]' peco-src bindkey '^^' peco-src-remote
今回のzshの設定を含めたdotfilesはこちらにコミットしています。
github.com
rev は使い道に迷いますが、cut と組み合わせることで他にも面白いことができそうです。
おしまい。