最終更新日 2002/10/07(Mon)

Dynamic Abbrev で長い単語も楽々入力


Dynamic Abbrev Expansion (動的略語展開) とは?

プログラムを作成していると、クラス名とか関数名とかが長くなりがちです。 このような長いクラス名などを正直にすべてタイプすると、 非常に面倒くさいだけではなく、タイプミスによるエラーの増加につながります。 そのような場合は、Dynamic Abbrev を使って長い識別子を展開してしまいましょう。 これで、楽して正確なコーディングを目指しましょう。

そもそも Emacs には Abbrev mode という略語展開用のマイナーモードが存在します。 Abbrev mode による展開も便利なのですが、単語を登録する必要があります。 そのため利用を躊躇することもしばしばです。 しかし、 Dynamic Abbrev はバッファにある単語を自動的に展開する単語を抽出します。 そのため、登録の必要がありません。 つまり、長い単語も一度バッファに取り込めばその時からすぐに展開できるのです。

展開の方法

展開の方法は簡単です。長い単語の始めの数文字を入力した状態で、 M-/(dabbrev-expand) と入力するだけです。

次のような状態で、M-/を入力すると、

void Foo::foo() throw(VeryVeryVeryLongNameException)
{
  throw Very_

次のように、上の行にある単語に展開されます。

void Foo::foo() throw(VeryVeryVeryLongNameException)
{
  throw VeryVeryVeryLongNameException_

検索の順序は以下のとおりです。

展開可能な候補が複数が存在する場合は、 M-/ を繰り返すことで、 順々に展開内容が切り替わります。候補切り替わりの順序は上記の検索順になります。

タグファイルにある単語を展開させる

上に述べたとおり、 Dynamic Abbrev は複数のバッファにある単語を展開対象とすることができます。 とすると、クラスや関数が定義されているファイルを沢山開いていれば、 多くのクラス・関数を展開対象とすることが可能になります。 かと言って一つ一つファイルを開いていては面倒です。

ということは多くのクラスや関数の名前が存在するファイルを一つ開けば良い訳です。 そういう用件を満すファイルといえば、そう、 TAGS です。 一度タグジャンプなどを使用して TAGS ファイルを読み込んでしまえば、 TAGS に取り込まれている全てのクラス名、関数名などが展開可能になります。 タグジャンプについては 「タグジャンプで関数の定義にジャンプ」を参照。

タグファイルの情報を使うんだったら、 M-TAB (complete-symbol) を使えばいいのでは?という尤もなご指摘もあるでしょう。 なぜ Dynamic Abbrev とタグファイルの組合せを紹介しているかというと、 Dynamic Abbrev ならタグファイルにあろうがなかろうが対象となるという理由で、 こちらの方が好みだからです。 (^_^;;;