📥
ghでfzfしてghqするextensionを作った
日本語だか英語だかわからんようなタイトル、失礼しました。
GitHub公式CLIのgh
の拡張機能を作成しましたので紹介します。
gh q
gh-qという名前にしました。
依存関係
以下のツールが必要です。
-
https://github.com/junegunn/fzf
- 強力なFuzzy finder
-
https://github.com/x-motemen/ghq
-
git clone
の先を自動で振り分けてくれるツール
-
導入
gh extension install kawarimidoll/gh-q
でインストールできます。
つかいかた
gh q
で起動します。
基本的には、自分のリポジトリが一覧で表示され、fzf
を利用したfuzzy findで選択できます。
そして、選択したものをghq get
でクローンします。
オプションを渡すことで、他のユーザーのリポジトリを選択することも可能です。
先行研究
はすさんのgh-fuzzyclone
を大いに参考にしました。感謝!
おまけ
ブックマークレット
ブラウザで開いているリポジトリをghq get
するときは、こちらのブックマークレットを使うことが多いです。
現在のページのURLをもとにghq get ...
のコードを生成し、自動でコピーまで行います。
javascript:(d=>((c,b,l)=>{c.textContent=l.href.replace(/(https:\/(\/[^/]+){3}).*/,'ghq get $1');b.appendChild(c);c.select();d.execCommand('copy');b.removeChild(c)})(d.createElement('textArea'),d.body,location))(document)
ghq getしたあとの移動
ghq get
はクローン先を自動で設定してくれますが、階層が深くなるので、直接cd
するのは億劫です。
私は、クローンしたあとの移動用に、以下のようなコマンドをdotfiles内に定義しています。
cgh() {
local dir
dir=$(ghq list | fzf --no-multi --exit-0 --query="$*" --preview="ls -FA1 $(ghq root)/{}")
[ -n "$dir" ] && cd "$(ghq root)/$dir" || return
}
gh
用の拡張もあるようです。
おわりに
開発環境を初期化したあと、簡単にghq get
したいと思って作り始めたのですが、運良く先人の肩に乗ることができ、サクッと完成できました。
よろしければご利用ください。
また、過去に以下のextensionも作っているので、試していただけると嬉しいです。
Discussion