理系学生日記

おまえはいつまで学生気分なのか

git-grep を Emacs で呼び出す helm-git-grep

git grep を Emacs から起動できたら捗るだろうなぁと思い立ってちょっと調べてみたら、そのものズバリの拡張である helm-git-grep が存在していました。

これを導入すると、Emacs から git grep を呼び出せるようになり、

  • helm インタフェースで使用し、インクリメンタルに該当箇所を検索
  • 当然、その結果ファイル・行に瞬時に移動する

なんてことができるようになります。 なんでおれは、これを調べていなかったんや…というレベル。

f:id:kiririmode:20171224074145p:plain

helm-git-grep 導入

ぼくの elisp 管理は現在も Cask なので、Cask ファイルに helm-git-grep を以下のように宣言た後、コマンドラインから cask を実行します。

(depends-on "helm-git-grep")

これで load-pathhelm-git-grep.el が組込まれるので、あとはこのファイル用の設定を書いていけば良いでしょう。

(require 'helm-git-grep)
(global-set-key (kbd "C-c g") 'helm-git-grep)
;; Invoke `helm-git-grep' from isearch.
(define-key isearch-mode-map (kbd "C-c g") 'helm-git-grep-from-isearch)
;; Invoke `helm-git-grep' from other helm.
(eval-after-load 'helm
  '(define-key helm-map (kbd "C-c g") 'helm-git-grep-from-helm))

wgrep.el との連携

Emacs で grep といえば、wgrep.el を使いたくなるところです。

wgrep.el は、Emacs で行なった grep の結果一覧バッファを直接編集することでその編集結果を実ファイル側に反映できるという elisp なのですが、helm-git-grep はこの wgrep.el との連携が可能です。

helm-git-grep の結果一覧画面から、C-x C-s を押すと、helm-git-grep-run-save-buffer が呼び出され *hggrep バッファにその内容が保存されます。あとは、(wgrep.el を使用できる設定にしていれば) e を押下すれば wgrep の編集を有効化できるようになります。ホントに便利。