More than 1 year has passed since last update.

この記事は. emacs Advent Calendar 2013の二日目です。

拙作の anzu.elについて紹介します.

概要

manga_osyoさんの vim-anzuを Emacs向けに portしたもので,
Google Chromeの検索のように, 検索文字列が現在のバッファでいくつマッチするのか
という情報と現在の位置をモードラインに表示するマイナーモードを提供します.

以下にイメージを示します.

anzu-gif1

モードラインの左端に注目してください. 検索文字列に応じて, 現在の位置,
全体のマッチ数が変化していることがわかります.

知らないソースを見て検索をするときに, 今の検索文字列が適切かどうかを
すぐに判断することができ, 非常に重宝しています.

インストール方法

MELPA, Marmaladeに登録されているので, package.elでインストールできます.

M-x package-install anzu

また el-getのレシピとしても登録されているので, el-getを使っている方も
手軽にインストールすることができます.

リポジトリ

https://github.com/syohex/emacs-anzu

設定

常に有効にしたい方は以下のように global-anzu-modeを有効にしてください

(global-anzu-mode +1)

カスタマイズ

カスタマイズの詳細については READMEを見ていただくと
してここではいくつかのおすすめの設定を示します.

(custom-set-variables
 '(anzu-mode-lighter "")
 '(anzu-deactivate-region t)
 '(anzu-search-threshold 1000))

anzu-mode-ligterはモードラインに表示されるマイナーモード名です. 常に anzu-modeを
有効にするのであれば空文字列で良いでしょう.

anzu-deactivate-regionは後述の置換コマンドをリージョン指定で行ったときに,
コマンド実行直後リージョンのハイライトを無効にするかどうかの設定です.
色がついたまま置換を行うと, インタラクティブに挿入される文字列が見づらいので
置換コマンドを使うのであればこの変数を tにすることを推奨します.

anzu-search-thresholdは全体のマッチ数を数えるときに, この数以上は数えない
ようにするというものです. 巨大なバッファで検索文字列と一致するものが数万,
数十万となったとき, 検索が非常に遅くなってしまいます. きっちり全体数を知りたい
という場合は別ですが, 多くの場合は「たくさんマッチする」という情報を知れれば
十分です. この変数に自分が多いと感じる数を設定しておくことで, 検索に余計な
時間を使うことを回避できます.

migemoユーザは anzu-use-migemotにすることで, 日本語検索にも
対応できます. (私は migemoを使っていないので nilにしています)

置換コマンド

anzu.elは置換コマンドも提供します. 置換コマンドでは, 被置換文字列のハイライト,
置換文字列の挿入をインタラクティブに行います. anzu-query-replacequery-replace
anzu版, anzu-query-replace-regexpquery-replace-regexpの anzu版となっています.

以下に正規表現置換のイメージを示します.

anzu-replace

anzu-query-replace-at-cursor-thing

その他の置換コマンドでおすすめなのがanzu-query-replace-at-cursor-thingです.
これは特定の範囲内(デフォルトでは関数内)の文字列を置換するコマンドでデフォルトの
被置換文字列はカーソル下の文字列(厳密にはシンボル)です. リファクタリングでとても
重宝します. 以下にイメージを示します.

anzu-query-thing.gif

oという名前がいまいちだなと思って名前を変更する例です.
正規表現としては \\<o\\>という指定をするので, oを含むだけの
文字列にマッチするということはありません.

visual-regexp

置換コマンドについてはvisual-regexpも同等の機能を提供しています. むしろ highlightは
そちらの方がおしゃれですなので, 通常の置換コマンドだけ使うのであれば, visual-regexp
良いと思います.

置換コマンドの良いところ

visual-regexpや anzuの置換コマンドで良いところは、置換する文字列が何かがすぐに
わかることです. これは特に正規表現置換のときに助かります. Emacsの正規表現が
あまり使われないのは正規表現置換が使いづらいからと私は考えます. せっかく入力
したのに何もマッチしなくて入力の苦労はなんだったんだとなってしまい, 正規表現
置換を使わなくなったという人は少なくないと思います. visual-regexpや anzuが
提供する置換コマンドで正規表現がどのようにマッチするかを把握しながら使う
ことでるので 正規表現力をアップさせるのにもってこいです. この利点から私は
標準の正規表現コマンドをそれらのコマンドに置き換えることを推奨します.

おわりに

anzu.elの紹介をしました. 機能のすべてについては述べられなかったので,
詳細を知りたい方は ドキュメントを参照してみてください.
わからないことがあれば twitter等で遠慮無く聞いてください.

機能拡張, 問題等ありましたら github issuesまでお願いします.

明日の担当は @shiba_yu36さんです. お楽しみに.

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.