helm-ag 20170209.745(in MELPA)
the silver searcher with helm interface

概要

<2016-10-05 Wed>爆速grepの ripgrep(rg) にも対応してますっ!!これがhelm-rg.el相当です。

これは重大なelispを見逃していました。

僕は grepag (the silver searcher) による絞り込み検索に、
昔作った anything-grep.el (EmacsWikiにあるよ)を使っていました。

helmにそれに相当するものはないかなーと思っていたのですが、
まさに helm-ag.el でした。

名前からして helm-grep のag版だろうなと
タカをくくってたのがいけませんでした。

M-x helm-do-grep はgrepのコマンドラインオプションを
helmのクエリで入力する方式なので気に入らないのです。

helmなんだから絞り込み検索したいんですが…

というわけでhelm-ag.elは灯台下暗しという教訓を教えてくれました。

helm-ag.elは名前とはうらはらに、 grep -n形式 の出力をする
検索プログラムをhelmインターフェースで絞り込みます。

よって、 helm-ag-base-command をカスタマイズ次第で
以下のプログラムに対応できます。

  • ag --nocolor --nogroup (デフォルト)
  • grep -rn (とりあえず動作確認したいだけの人は再帰grepで)
  • csearch -n (codesearch という検索エンジン)
  • pt --nocolor --nogroup (Shift_JIS, EUC-JP対応ag相当。未確認)
  • ripgrep --vimgrep --no-heading (agの数倍高速なgrepプログラム!!)

helm-ag-insert-at-point を設定すれば、
現在位置のシンボルをデフォルトのクエリにしてくれます。

この状態で M-x helm-ag を C-M-g に割り当て、
backward-kill-sexp をC-M-kに割り当てれば、
C-M-g C-M-kで他のクエリを入力できるようになり快適です。

helm-ag の引数は検索対象のディレクトリなので、
projectile などのプロジェクトを扱うパッケージと
容易に連携できます。(M-x projectile-helm-ag)

.emacs.d以下を検索する M-x helm-ag-dot-emacs も定義しました。

20150209074711.png
Fig1: M-x helm-ag-dot-emacsでdefstructと入力

20150209074715.png
Fig2: defstructの検索結果が出てくる

20150209074744.png
Fig3: funcで絞り込む

作者のページ→ http://d.hatena.ne.jp/syohex/20130302/1362182193

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてhelm-agを使う方は
以下のコマンドを実行します。

M-x package-install helm-ag

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name helm-ag

<2016-10-05 Wed>ripgrep対応

先日ripgrep.el を紹介したばかりですが、helm-agでripgrepを動かすことができます。
とにかくめちゃくちゃ速いのでagを使っている人はすぐに乗り換えてもいいです。
Windowsバイナリも配布されていますので、導入に困ることはないでしょう。

ripgrepをhelm化させるには、この設定を加えます。

(setq helm-ag-base-command "rg --vimgrep --no-heading")

設定 150209063222.helm-ag.el(以下のコードと同一)

;;; ag以外の検索コマンドも使える
;; (setq helm-ag-base-command "grep -rin")
;; (setq helm-ag-base-command "csearch -n")
;; (setq helm-ag-base-command "pt --nocolor --nogroup")
;; (setq helm-ag-base-command "rg --vimgrep --no-heading")
;;; 現在のシンボルをデフォルトのクエリにする
(setq helm-ag-insert-at-point 'symbol)
;;; C-M-gはちょうどあいてる
(global-set-key (kbd "C-M-g") 'helm-ag)
(global-set-key (kbd "C-M-k") 'backward-kill-sexp) ;推奨

(defun helm-ag-dot-emacs ()
  ".emacs.d以下を検索"
  (interactive)
  (helm-ag "~/.emacs.d/"))
(require 'projectile nil t)
(defun helm-projectile-ag ()
  "Projectileと連携"
  (interactive)
  (helm-ag (projectile-project-root)))
;; (helm-ag "~/.emacs.d/")

実行方法

$ wget http://rubikitch.com/f/150209063222.helm-ag.el
$ emacs -Q -f package-initialize -l 150209063222.helm-ag.el

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。