略語展開機能

[
動的略語展開] [静的略語展開]

動的略語展開

例えば、次のような文書を書いていたとします。
void main()
{
  int area, volume;
  int hight, width, depth;

  area = hight * width;
  volume = h

次は "hight" という単語を書くつもりです。
ここで "M-/" とタイプします。
void main()
{
  int area, volume;
  int hight, width, depth;

  area = hight * width;
  volume = hight

このように補完されます。
つまり、M-/deabbrev-expand)は、カーソル直前の文字をバッファ内の単語で補完するコマンドです。

バッファ内に h で始まる単語が複数あった場合は、カーソル位置から遡って一番近いものをまず補完します。 続けて M-/ をタイプすれば、さらにバッファを遡って補完していきます。

さて、先ほどの状態から、さらに SPC M-/ を2回続けてタイプしてみましょう。

void main()
{
  int area, volume;
  int hight, width, depth;

  area = hight * width;
  volume = hight * width

このようになったはずです。

大変便利な動的略語展開ですが、日本語の補完にはまだまだ問題があります。
日本語では、単語の区切りが判別しづらいので、大抵は補完しすぎてしまいます。
ですが、この機能を使うのは、普通の文章よりもプログラミングや HTML, LaTeX 文書のタグ、比較的長い英単語の入力時が多いと思います。
充分この機能の恩恵に与かることができるでしょう。

カスタマイズ

私はM-/ がタイプしづらいので、M-SPC に割り当てています。
以下を .emacs に書いておきます。
;; M-SPC で動的略語展開
(global-set-key "\M- " 'dabbrev-expand)
注) M-SPC はデフォルトではコマンド just-one-space に割り当てられています。
これはカーソル位置周辺のスペースやタブを、一つだけ残して消去します。

より細かい設定をしたい人は、costomizeを使って
M-x customize-group → dabbrev
としてみて下さい。

先頭へ


静的略語展開

Java プログラムで必ず出てくる、次の記述があります。

public static void main (String args[]) {

こうした決まりきった長い文字を、いちいちタイプするのは面倒です。
そこで、この文字列を main という短い単語で置き換えます。
まず、バッファ内で
main
とタイプします。カーソルが main の直後にある状態で C-x a i l (inverse-add-mode-abbrev) とタイプします。
するとミニバッファに
Mode expansion for "main":
と表示されます。


ここで
public static void main (String args[]) {
と入力します。


最後に Return をタイプすると、バッファ中の main が置き換わります。
以降は、main とタイプした後で C-x ' (expand-abbrev) とタイプすることで、略語 main が展開されます。

この C-x a i l で登録した略語は、 そのメジャーモードでのみ有効となります
つまり、さきほどの Java プログラムのソース中で登録した main は java-mode でのみ展開されます。
よって、例えば同じ略語 main を

のように、編集するメジャーモードによって違う展開をさせることができます。

登録した略語は、そのままでは Emacs を閉じたら消えてしまいます。
そこで、この略語を保存しておきます。 M-x write-abbrev-file としてください。

すると略語を保存するファイル名を聞かれます。 デフォルトは ~/.abbrev_defs なので、これで良ければ何も入力せずに Return とすればOKです。
違うファイル名がよければ、適宜指定してください。
Emacs を起動したとき、保存した略語を自動的に読み込んでおくには、.emacs に

(read-abbrev-file)

と書いておきます。

その他の略語の登録方法を挙げておきます。
キーバインド コマンド名 内容
C-x a g add-global-abbrev カーソル直前の単語の略語を登録する。
登録した略語はどのモードでも使用可能。
C-x a l add-mode-abbrev 上と同じだが、現在のモードでのみ有効
C-x a i g inverse-add-global-abbrev カーソル直前の単語を略語とする文字列を登録。
どのモードでも使用可能。
C-x a i l inverse-add-mode-abbrev カーソル直前の単語を略語とする文字列を登録。
登録したモードでのみ使用可能。

ちょっと進んだ使い方

  1. "C-x a g" と "C-x a l" での登録では、数引数をあたえると「直前のいくつかの単語の略語を定義する」 ことになります。
    例えば "C-u 3 C-x a l" とすると、カーソル直前の 3つの単語の略語を定義できます。
    引数として 0 を与えると、リージョンの略語を定義できます。

  2. M-x edit-abbrevs で略語テーブルを編集することができます。
    編集が終了したら C-c C-c でセーブします。
    セーブ後 C-x k でバッファを消去してください。

自動略語展開

abbrev-mode では、C-x ' をタイプしなくても 略語を自動的に展開していきます。

M-x abbrev-mode

で、この略語モードになります。 勝手に展開されたくないときは C-q に続けてタイプします。

カスタマイズ

私は、略語の展開を C-o に割り当てています。
これはお好みで。

(global-set-key "\C-o" 'expand-abbrev)

ちなみに C-o はデフォルトではコマンド open-line に 割り当てられています。

customize は M-x customize-group で abbrev を 選んでください。

先頭へ


戻る
Last modified: Wed Apr 12 01:57:56 2000