Cygwin の Emacs で migemo を使うには

migemoはEmacs上で日本語のインクリメンタルサーチを快適にしてくれるものです。 ローマ字入力のまま日本語をインクリメンタルサーチできるのです。

例えば「ローマ字」という語をインクリメンタルサーチするのに”romaji”とキー入力すれば良いのです。

Emacsからmigemoを使うには migemo.elと正規表現を生成するライブラリが必要

migemoは、ローマ字入力の検索文字列から日本語を含む正規表現を生成して、その正規表現でインクリメンタルサーチを実現するものです。

そのため正規表現を生成するライブラリと、Emacsと通信するEmacs Lispが必要です。

正規表現を生成するライブラリは当初はRuby/Migemoを使うものでしたが、C/Migemoが出来てからはC/Migemoを使うのが主流のようです。

C/MigemoとEmacsを通信するEmacs Lispはmigemo.elです。

大雑把な関係は下の図のような感じです。

CygwinのEmacsでC/Migemoを使うにはCygwin上でビルドする必要がある

ところで、CygwinのEmacsでmigemoを使うには、Cygwin上でC/Migemoをビルドする必要があります。

C/Migemoの開発元であるKaoriYaさん ではWindows nativeでビルドされたバイナリが配布されていますが、残念ながらCygwin上では上手く動きません。 (少なくともぼくのCygwin環境では動きませんでした…。Windowsのコマンドプロンプトからはちゃんと動きますよ。)

ここでは、CygwinでのC/MigemoのビルドとEmacsの設定について説明します。

nkfのインストール

C/Migemoのビルドには nkf か qkc のいずれかが必要です。ぼくは使い慣れているnkfをインストールしました。

https://ja.osdn.net/projects/nkf/ からnkfのソースコードをダウンロードします。 ぼくがダウンロードしたのはversion 2.1.4 でした。

tar xvf nkf-2.1.4.tar.gz
make
make install

C/Migemoのインストール

ソースコードを https://github.com/koron/cmigemo からダウンロードします。

zipファイルを展開します。その後は展開したディレクトリにある cmigemo-master/doc/README_j.txtの通りに実行します:

./configure
make cyg
make cyg-dict
make cyg-install

dictの場所は

/usr/local/share/migemo/utf-8/migemo-dict

になります。

動作確認した例を下に示します。romaと入力した結果です:

~$ cmigemo.exe -d /usr/local/share/migemo/utf-8/migemo-dict -e
migemo_open("/usr/local/share/migemo/utf-8/migemo-dict")=0x6000003c0
clock()=0.093000
QUERY: roma
PATTERN: \(ロ\s-*マ\|浪\s-*漫\|ろ\s-*ま\|r\s-*o\s-*m\s-*a\|ル\s-*ー\s-*マ\s-*ニ\s-*ア\|羅\s-*馬\|ロ\s-*\(マ\|ー\s-*マ\)\|r\s-*o\s-*m\s-*a\)
QUERY:

migemo.elのインストール

https://github.com/emacs-jp/migemo からダウンロードしてload-pathのどこかに置くか、または M-x package-install (RETURN) migemo (RETURN)でインストールします。

設定

~/.emacs.d/init.el には下のように書いておきます。

(load "migemo")
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")

(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8)
(migemo-init)    

(setq migemo-coding-system ‘utf-8)がないと上手く動かないようです。

migemoを動かしている例

実際にmigemoを動かしている例を下に示します。

C-sでミニバッファーの”I-search”の表示のまえに[MIGEMO]となっています。これでmigemoが有効になっていることが分かります。

このインクリメンタルサーチの例では”kokumin”とローマ字で入れています。バッファーでは漢字の「国民」にマッチしているのが分かります。

migemoを使うと日本語のインクリメンタルサーチがとても快適です。もう手放せないですよ。