2016/06/28

Debian/UbuntuのEmacsでC/Migemoによる日本語の文字列検索を行う

Debian/Ubuntu上のGNU EmacsC/Migemoを用いる際の設定などについてを2012年の5月と10月に扱ったのだが、本記事でも触れているように導入がしやすいように改善されているため、その変更に関する内容に加えてEmacs上のC/Migemoによる文字列検索の使い方についての内容も書き加えている。

  1. EmacsにC/Migemoを導入すると何ができるようになるか
  2. パッケージの提供形式と名前
    1. 以前の提供形式
    2. Ubuntu 15.04で変更された提供形式
    3. Ubuntu 18.04以降の提供形式 (2018/5/20追記)
  3. 使い方

EmacsにC/Migemoを導入すると何ができるようになるか

詳しい使い方は後述するが、EmacsC/MigemoMigemo(Ruby/Migemo)を導入することにより、検索文字列としてローマ字形式の日本語を入力することで(かな漢字変換なしで)日本語文字列を順番(逆方向可)に検索していくことが可能になる。

また、これ以外にも、カタカナの外来語を検索する際にその外来語に対応する英単語の一部を検索文字列として入力したり[1]、全角英数を(半角英数の入力によって)検索したりといった検索方法もある。

オリジナルのRuby/Migemoは動作が遅く、別の作者がVimに組み込む目的でC言語で書き直したC/Migemoは高速(快適)に動作する。

パッケージの提供形式と名前

以前の提供形式

以前はmigemoという名前のパッケージがRuby/Migemo本体とEmacs用の機能拡張ファイルを提供しており、検索処理は低速なRuby版で行うのが標準で、後に高速なC/Migemocmigemoという名前でディストリのパッケージとして利用可能になった[2]後も、こちらが使用したい場合にはこのパッケージを別途インストールした上でC/Migemoを使用するためのEmacsの設定を記述する必要があった。

Ubuntu 15.04で変更された提供形式

Ubuntu 15.04からはRuby/Migemoの代わりに高速なC/Migemoを標準で使用するように変更され、migemo-elパッケージをインストールするだけ[3]追加の設定の記述なく使用可能になっている。Debianでは2013年(7.0 “wheezy”)の時点で既にこのパッケージ提供形式になっていた。

なお、この新しい提供形式においてC/Migemo関係の設定は/etc/emacs/site-start.d/50migemo-el.elに書かれている。

Ubuntu 18.04以降の提供形式 (2018/5/20追記)

18.04からはmigemo-elelpa-migemoへの移行用ダミーパッケージとなり、今後はelpa-migemoが用いられる。なお、18.04ではEmacsのバージョン25以上で警告メッセージ(Warning (bytecomp): ‘isearch-word’ is an obsolete variable (as of 25.1); use ‘isearch-regexp-function’ instead. [2 times])が起動時に出るが、2018年5月時点の18.10(Cosmic)用のelpa-migemoパッケージをpackages.ubuntu.comからパッケージを手動でダウンロードおよびインストールすることで解決する。これは公式のGitHub上の修正が18.10以降用のパッケージにパッチとして取り込まれたことによるもの。

有効化するには以下の記述が必要となった。

[追記]ファイル名:[ホームディレクトリ]/.emacs.el
(load "migemo")

使い方

EmacsにおけるC/Migemoの使用はEmacsにもともと存在する検索機能の1つ “インクリメンタルサーチ”[4] を拡張した形での使い方となり、検索文字列の入力と一致の仕方の挙動を除いて標準(未インストール時)のCtrl-s(順方向)やCtrl-r(逆方向)による検索と同様に動作する。

以下は順方向の検索での説明となる。操作は日本語を含んだバッファの中で行う。

必要なパッケージがインストールされた状態でCtrl-sを押すと下部(ミニバッファ)に “[MIGEMO] I-search:” と表示されるので、(日本語の入力をオフにするなどして)半角英数が入力される状態にして*検索したい日本語文字列をローマ字形式で入力*していく[5]と、一致した箇所があればそれらが反転表示されて検索開始前のカーソル位置から末尾側にある最初の一致箇所にカーソルが移動して、現在の一致箇所は更に別の色で強調される。Ctrl-sを繰り返し押すと次の一致箇所へとカーソルが次々と移動していく。

  • 一致箇所がカーソル位置から末尾側になければ “[MIGEMO] Failing I-search:” と表示される
  • カーソル位置から先頭側にのみ一致箇所がある場合、上の表示がされた後にCtrl-sを押すと、先頭から再検索される
    • 最初に一致した箇所より上の一致箇所では “Wrapped”, そうでなければ(既にたどったことのある一致箇所なら) “Overwrapped” の表示がミニバッファ内に追加される

逆方向(Ctrl-r)の場合は一致箇所を探したり進んだりする方向が逆なのと “backward” の表示がミニバッファに含まれるという点が異なる他は順方向と同様。

検索中にCtrl-gを押すと検索を抜けることができる(状況によっては一部の検索文字が残るが、繰り返し押すと抜けられる)。

使用したバージョン:
  • GNU Emacs 24.5
  • migemo.el 1.9.1
  • C/Migemo 2014/3/6
[1]: 例えば “バージョン” という単語を検索するのに “ver” と入力する
[2]: これより前にはC/Migemoのパッケージがなかったため、2010年に自作パッケージを作成してPPAリポジトリで公開していた
[3]: cmigemoが依存パッケージになり、未インストールの場合に同時にインストールされる
[4]: 検索文字列を1文字入力(追加)するごとに検索処理が行われる形の検索
[5]: “:” の右側に検索文字列が表示される