- helm-ag 20170209.745(in MELPA)
- the silver searcher with helm interface
概要
ripgrep(rg) にも対応してますっ!!これがhelm-rg.el相当です。
これは重大なelispを見逃していました。
僕は grep や ag (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 も定義しました。
Fig1: M-x helm-ag-dot-emacsでdefstructと入力
Fig2: defstructの検索結果が出てくる
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
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
本サイト内の関連パッケージ
- ag - A front-end for ag ('the silver searcher'), the C ack replacement.
- ripgrep - Front-end for ripgrep, a command line search tool
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。