インテリジェント補完コマンド ac-mode

最新版

2002-04-11
2002-02-17

はじめに

ac-mode は拙作 pbe-complete の後継として開発されているものです. pbe-complete の開発は終了しました.

ac-mode の ac とは Advanced Completion の略で, 当初の構想で pbe の略でもある Programing By Example とはと大きく外れてしまい, 全然名前が体をあらわしていなかったため改名しました. (Arayuru HOkan: aho-mode しようかと最後まで悩みました)

ac-mode とは

PATH の補完, URL の補完, 文字列の補完 (dabbrev), インデントを ひとつのコマンド, つまりひとつのキーでやってしまおうというものです.

例えば文字列 "~/.em" の後にこのコマンドを実行すれば "~/.emacs" と 補完され, "http://www.t" の後に実行すれば "http://www.taiyaki.org/" と 補完されます. さらに文字列の補完よりも行のインデントが適切だと 判断した場合は, インデントを実行するようになっています.

インストール

Download

http://www.taiyaki.org/elisp/ac-mode/src/ から ac-mode.el をダウンロードしてください.

.emacs の設定

ac-mode.el を ~/elisp に置いたとして, 次の 2 行を .emacs に追加してください. 最初の 1 行目は既に書かれていれば必要ありません.

(setq load-path (cons (expand-file-name "~/elisp") load-path))
(autoload 'ac-mode "ac-mode" "Minor mode for advanced completion." t nil)

~/urls.txt の作成

URL の補完をするためにはホームディレクトリに urls.txt を 作成する必要があります. urls.txt のフォーマットは各行が http: で始まるプレーンテキストでソートされている必要があります. 手で書くことももちろん可能ですが, 以下のスクリプトによって netscape のヒストリから作成可能です.

strings ~/.netscape/history.dat | grep "^http://.*\(/\|\.html\?\)$" | sort | uniq > ~/urls.txt 

使い方

M-x ac-mode と実行すると, ac-mode の状態がトグルします. TAB キー (\C-i) を押すと文脈を (それなりに) 判断して補完, またはインデントします.

補完をしているときにもう一度 TAB キーを押すと次の候補が表示されます. 補完中にスペースキーを押すとその補完で確定と判断し, カーソルが 単語末まで移動します. またカーソルの移動および文字入力によって, 補完候補の絞り込みが可能になります.

現在実装されている補完モジュール

1) インデント
region (範囲指定) がある場合か, 以下の補完に当てはまらない場合, または行頭行末.
2) URL
~/urls.txt に並んでいるリストから当てはまるもの. http: で始まるものです.
3) ファイルパス
/ や ~ で始まる場合.
4) dabbrev (動的補完)

ほとんどの単語上の場合.
文字列末で実行した場合はそのまま補完動作がはじまりますが, 文字列中で実行した場合, 最初の TAB キー (\C-i) は無視されます. TAB キーをそのまま繰り返すと補完動作がはじまります.

2002-02-17 版以降では bigram 補完にも対応しました. 例えば "This is" という文字列があった場合に, "This " と入力した後で 補完を行うと "This is" と補完されます.

5) migemo-dabbrev
日本語として読める 4 文字以上の単語上の場合. (デフォルトでは OFF)

カスタマイズ

以下のカスタマイズをする場合は .emacs の設定を前述のものから, 次のものに変更してください.

(setq load-path (cons (expand-file-name "~/elisp") load-path))
(load "ac-mode")

Text モードでつねに ac-mode を on にする

Text に限らずたいていのメジャーモードには <モード名>-hook があるので これを利用します.

(add-hook 'text-mode-hook 'ac-mode-on)

特定のメジャーモード以外でつねに ac-mode を on にする

ファイルを開いたときに必ず find-file-hooks が呼ばれるのでこれを利用します. 現在のモードが何であるかは M-x describe-variable [enter] major-mode [enter] で確認できます.

(setq ac-mode-exception '(dired-mode hex-mode))
(add-hook 'find-file-hooks 'ac-mode-without-exception)

補完後, 常にカーソルを単語末に移動させたい

ac-mode では単語の補完後, カーソルは補完候補の共通部分までしか移動しません. 例えば "ac-mode", "ac-complete" の 2 つがある場合, "ac-mode" と補完しますが カーソルは "ac-" の位置で留まります. これは dabbrev-expand と異なる動作です.

ac-mode では補完後, スペースキー (ac-enter) を押すと補完単語末まで カーソルが移動しますが, dabbrev-expand と同じ動作を行いたい場合は カスタマイズ変数 ac-mode-goto-end-of-word を nil 以外に設定して下さい.

(setq ac-mode-goto-end-of-word t)

メーリングリスト

ac-mode 限定のメーリングリストではありませんが, 小松が作成している ELisp 全般に関してのメーリングリストを QuickMLで作成しました.

参加される方は, 以下のようなメールを送信してください. また Cc: に自分のメールアドレスを付けないでください. QuickML の仕様上, Cc: に参加者以外のメールアドレスがあると 参加できません.

To: elisp@taiyaki.quickml.com
From: (自分のアドレス)
Cc: komatsu@taiyaki.org
Subject: 参加します (お名前)

(本文にかるく自己紹介でもお願いします,
 何も書かれていないと QuickML のシステム上登録できません.)

History

2002-04-11
2002-02-17
2001-12-29
2001-12-21
2001-12-19
2001-11-13
2001-10-29
2001-04-06
2001-03-31
2001-02-11

BUG & TODO


ホームページ
天照
ELisp
replace-region
rectangle
ac-mode
accel-key
table
wordnet
urlencode
visible-mark
physical-line-mode
my-keisen-mule
myimage
text-adjust
Palm
Linux & Unix
日記
観測カメラ
Index を閉じる
小松 弘幸 <komatsu@taiyaki.org>
$Id: index.html,v 1.1.1.1 2002/08/25 14:24:47 komatsu Exp $