計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

Emacsのhelm-agでripgrepを使う

インストール

まずはripgrepが必要。そのあとにEmacsのhelm-agパッケージ。
(当然helmのパッケージも必要)

ripgrep

grepを高速化させたagよりさらに高速な最近人気のやつ。

github.com

Mac

brewで一発

$ brew install ripgrep

Ubuntu

Ubuntu 18.10より新しい場合はaptでインストールできるらしいが 古いやつではDebianの.debファイルから入れる。
各OSごとにバイナリも配布されてるのでそっちでもいい。

.debファイルのインストールはgithubのページに書いてあるのでその通りにする

$ curl -LO https://github.com/BurntSushi/ripgrep/releases/download/0.10.0/ripgrep_0.10.0_amd64.deb
$ sudo dpkg -i ripgrep_0.10.0_amd64.deb

helm-ag

Melpaからパッケージを入れるだけ。

設定

helm-agでは当然デフォルトはagを使うので、 ripgrepを使う設定に変える。

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

オプションの--vimgrep--no-headingはripgrepの出力をhelm-agで扱えるようにgrepとかの結果に合わせるためのものらしい。

-Sオプションをつけると、基本的には大文字小文字の区別なしに検索して、大文字を含めた時だけ区別してくれるようになるのでおすすめ。

ついでにtabbarの設定

後述するようにhelm-agでgrepした結果をバッファに一時的に保存しておける。
このバッファはtabbarでも常に表示させたいので設定を変更しておく

設定の一部分

;;----- 表示するバッファ
(defun my-tabbar-buffer-list ()
  (delq nil
        (mapcar #'(lambda (b)
                    (cond
                     ;; Always include the current buffer.
                     ((eq (current-buffer) b) b)
                     ((buffer-file-name b) b)
                     ((char-equal ?\  (aref (buffer-name b) 0)) nil)
                     ((equal "*scratch*" (buffer-name b)) b) ; *scratch*バッファは表示する
                     ((equal "*helm ag results*" (buffer-name b)) b) ; *helm ag results*バッファは表示する
                     ((char-equal ?* (aref (buffer-name b) 0)) nil) ; それ以外の * で始まるバッファは表示しない
                     ((buffer-live-p b) b)))
                (buffer-list))))
(setq tabbar-buffer-list-function 'my-tabbar-buffer-list)

使い方

helm-agを実行してgrepと同じように検索したい文字を入力する。カレントディレクトリ以下をサブディレクトリも含めて検索してくれる。
grepと同じような結果が得られたらhelmなのでそこからさらに絞り込み可能。

結果が出ているミニバッファはC-x C-sでバッファとして保存可能(helm ag results)。
このバッファでの操作は

  • Enter: 該当箇所を開く
  • C-o: 該当箇所を別バッファで開く
  • g: update