目次
- ripgrep 20170602.152(in MELPA)
- Front-end for ripgrep, a command line search tool
概要
ripgrep.el は、超高速grepことripgrep(rg) のEmacsインターフェースです。
現在、MELPAに登場したばかりの出来立てほやほやですが、十分便利に使えます。
現時点においてM-x ripgrep-regexpのみがコマンドとして使えます。
M-x ripgrep-regexpを実行すると、正規表現と検索対象のディレクトリを聞いてきます。
するとM-x grep同様に正規表現にマッチした行が出力されます。
rgはWindowsバイナリも配布されていますので、Windowsユーザにとっても嬉しいのではないでしょうか?
Fig1: M-x ripgrep-regexp
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))
初めてripgrepを使う方は
以下のコマンドを実行します。
M-x package-install ripgrep
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name ripgrep
ripgrepとは
ripgrepとは、2016年9月に登場したばかりの超高速grepです。
その速度は目をみはるほどで、高速grepと名高いthe_silver_searcher(ag) をもはるかに凌ぐほどです!!
しかもagのように不要なファイル検索をしないし、GNU grepの高速性をも兼ね備えています。
開発して間がないですが、すでにたくさんのオプションを持っていて、乗り変えを検討してもいいと思います。
なぜ高速かというと、ripgrepがRust で書かれているからです。
Rustは安全性、速度、並行性にフォーカスしたシステムプログラミング言語であることに加え、
Rustの正規表現エンジンが超高速であることです。
Rustに興味がある方は日本語の解説ページ があります。
ripgrepのベンチマークについては作者の記事 があります。
ripgrepをインストールする
ripgrepはLinux/Mac/Windowsバイナリが配布されていますので、
Rustの開発環境をインストールする必要はありません。
現在毎日のようにリリースされています!
やばいです。
https://github.com/BurntSushi/ripgrep/releases
からバイナリをダウンロードしてください。
Windowsの方はMinGW(gnu)かMSVCのどちらかのバイナリを選べます。
MSVC版を使う場合はMicrosoft Visual C++ Build Tools をインストールする必要があります。
見よ、この速さ!
Linuxカーネルツリーで検索したところ、agの3倍も速いっ!!
https://github.com/BurntSushi/ripgrep より
Tool Command Line count Time ripgrep rg -n -w '[A-Z]+_SUSPEND'
450 0.245s The Silver Searcher ag -w '[A-Z]+_SUSPEND'
450 0.753s git grep LC_ALL=C git grep -E -n -w '[A-Z]+_SUSPEND'
450 0.823s git grep (Unicode) LC_ALL=en_US.UTF-8 git grep -E -n -w '[A-Z]+_SUSPEND'
450 2.880s sift sift --git -n -w '[A-Z]+_SUSPEND'
450 3.656s The Platinum Searcher pt -w -e '[A-Z]+_SUSPEND'
450 12.369s ack ack -w '[A-Z]+_SUSPEND'
1878 16.952s
おすすめオプション
「-S」オプションは大文字小文字の区別において空気読んでくれます。
すべてが小文字ならば大文字小文字区別せず、大文字が含まれていれば区別するようになります。
「--no-heading」オプションはgrep形式の出力となります。
実際ripgrep.elでも使われています。
設定 161002090545.ripgrep.el(以下のコードと同一)
;;; rgバイナリの位置 (setq ripgrep-executable "~/.cargo/bin/rg") ;;; rgに渡すオプション (setq ripgrep-arguments '("-S"))
実行方法
$ wget http://rubikitch.com/f/161002090545.ripgrep.el $ emacs -Q -f package-initialize -l 161002090545.ripgrep.el
参考サイト
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。