tohokuaikiのチラシの裏

技術的ネタとか。

xyzzyで単語の自動補完(Static編)

xyzzy使ってるんだけど、自動補完してくれないかなーっていうところがあって。

で、
動的補完と静的補完の設定と使い方 | for programer | しょぼしょぼすくりぷと xyzzy
読んで、うーん、うーんってうなってようやくできたのでメモ。

静的補完と動的補完

静的補完ってのは、自分でそのリストを手書きで作ってやること。
動的補完ってのは、今開いているバッファから単語を検索してそれっぽいのを補完してやるってこと。

動的補完は、C-x C-/ で何も考えなくてもOK。PHP-modeだとこのバッファ+PHP関数が補完対象になるよ。

静的補完の準備

まず、xyzzyのホームディレクトリ*1に、.abbrev_defsってファイルを作る。作らなくてもいいかもしれない。でも、作らないとなんか設定値を保存してくれなかった。
なくてもO.K。作る時にセーブできる。ということでいきなりおもむろに次へ。

静的補完用の単語登録

なかなかややこしかった。間違ってるかもしれない。

例で示します。

  • htmlモードで開いている時に、「hd」って入力したら、「hatenadiary」って自動的に入れて欲しい場合

おもむろに、test.htmlとHTMLファイルを開きます。いえ、単純になんでもいいのですが、M-x html-modeってやれば。

で、次に、hdと打ちます。hdの先頭で、C-spcでマークセット

そして、hdの後ろで、C-x C-hをします。これはモード単位での単語登録で、全部のモードで有効にしたい単語の場合はM-0 C-x C-a ってする。

そして、展開して欲しい単語「hatenadiary」って入力する。

単語の保存

実は、これではまだ登録したことになっていない。「バッファに登録しただけ」なんである。なのでまだ補完機能は使えない。

保存するには、M-x write-abbrev-file してやる。

すると、デフォルトの保存位置である~/.abbrev_defsを指定されるので何も考えずにリターン。

単語のロード

でもまだ使える状態にはなっていない。使うためにはabbrev-modeをONにしないといけないので、
M-x abbrev-mode
としてabbrev-modeをONにしてやる。

すると、hdって打ってリターンや半角スペースなどを入力すると、自動補完されるよ。

一気に単語登録したい場合は、

一気に単語登録したい場合や、過去の単語を編集したい場合は、M-x edit-abbrevs-mode。すると、

ってなるから、なんとなく登録してやる。してやったあとは、ちゃんとC-x C-sで保存しないと使えないよ。

*1:これの意味ってなかなか難しいよね。ようはWindows環境変数にXYZZYHOMEってディレクトリパスを作ってやるだけなんだけど