ghq + fzf でプロジェクトを選択するための bash 設定

シェアする

開発環境でのプロジェクト管理に ghq を導入しました.

ghq は Go 言語と同様のプロジェクト管理を Go 言語以外でも利用するための便利なツールです.fzf を使ってインタラクティブに ghq 管理下のプロジェクトへ移動する設定を書いたので紹介します.

スポンサーリンク
レクタングル(大)広告

検証環境

  • Ubuntu: 19.10
  • Bash: 5.0.3
  • ghq: 0.14.0
  • fzf: 0.18.0

実装

下記コードでC-]のショートカットでプロジェクト間を移動することができます.

function fzf_pjc() {
  local project_name=$(ghq list | $(__fzfcmd))
  if [ -n "$project_name" ]; then
    local project_full_path=$(ghq root)/$project_name
    local project_relative_path="~/$(realpath --relative-to=$HOME $project_full_path)"
    READLINE_LINE="cd $project_relative_path"
    READLINE_POINT=${#READLINE_LINE}
  fi
}
bind -x '"\C-]": fzf_pjc'

実行例

実行結果の選択画面は下記のようになります.ここでは例として ghq, fzf, kubernetes のリポジトリが ghq で管理下にあるものとします.

>   < 3/3
  github.com/motemen/ghq
  github.com/junegunn/fzf
> github.com/kubernetes/kubernetes

この状態で決定キーを入力するとシェルに次のように移動コマンドが生成されます.問題なければそのまま実行します.

$ cd ~/pjc/github.com/kubernetes/kubernetes

私の環境では ghq の root を ~/pjc と設定しているため,上記のような移動コマンドが生成されています.異なるディレクトリを指定している場合はその設定に対応したコマンドが生成されます.

まとめ

工夫した点としては,プロジェクトの選択画面では自分のプロジェクトの場所に興味はないので純粋に移動したいプロジェクトだけを表示し,選択後にそのプロジェクトに移動するコマンドを生成するようにしています.手動で移動する際は絶対パスでは書かないため相対パスで表示することで違和感を減らしたこともこだわりです.既存のスニペットでは実現できなかった自分のこだわりを実現することができたので,この機能に関しては満足しています.

スポンサーリンク
レクタングル(大)広告

シェアする

フォローする

スポンサーリンク
レクタングル(大)広告