5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EmacsのProjectileでghqを使う

Posted at

概要

ghqでリポジトリを管理し、fzfやpecoでそのディレクトリを簡単に移動できるのはとても便利ですが、同じようなことをEmacsでも行う方法です。

これまでも、Emacsの補完機能と組み合わせたemacs-lispで、これを実現する方法が提供されています。

ただ、EmacsにはProjectileというプロジェクト管理の便利なパッケージがあるので、そこでghqの管理するリポジトリ一覧を使いたいなと思いました。

設定

Projectileとghqを設定した上で、以下の設定を追加するだけです。ghqで管理するリポジトリ一覧をProjectileから使えるようになります。Projectileの標準的な設定ならプロジェクト切り替えは "C-c p p" です。idoやivyなどが設定されていれば、この切り替えに補完インターフェースも機能します。

(when (executable-find "ghq")
  (setq projectile-known-projects
        (mapcar
         (lambda (x) (abbreviate-file-name x))
         (split-string (shell-command-to-string "ghq list --full-path")))))

ただ、とても簡単なコードなので、ghqで管理していないものは一切利用できなくなります。また細かいところですが、Emacs起動中にghqで新規にリポジトリを用意した場合、それを自動的に検知してくれたりはしないです。

おまけ

Projectileは特定のプロジェクト配下に限定してfind-file ("C-c p f")したり、grep ("C-c p s g")したりできます。以下は、use-packageを使った場合の設定例です。

;; projectile
(use-package projectile
  :ensure t
  :diminish
  :custom
  (projectile-switch-project-action 'projectile-dired)
  :config
  (projectile-mode +1)
  (when (executable-find "ghq")
    (setq projectile-known-projects
          (mapcar
           (lambda (x) (abbreviate-file-name x))
           (split-string (shell-command-to-string "ghq list --full-path")))))
  :bind-keymap
  ("C-c p" . projectile-command-map))
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?