[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34. テキストの補完入力 ― abbrev ,定型句 (2008/11/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev%20dabbrev"
"MeadowMemo/テキストの補完入力―abbrev,定型句"へのコメント(無し)
検索全文Elisp


この章で紹介していること

テキストを入力する際,何度も同じ単語を入力するのは面倒なものです.面倒なだけでな く,毎回入力をしているとどうしてもタイプミスをしてしまいます.

そこで, Meadow (Emacs) には長い単語でも簡単に入力できる機能が備わっています.

この章では,そのような機能を紹介します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1 定型句の登録 ― abbrev-mode (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev-mode"
"MeadowMemo/定型句の登録―abbrev-mode"へのコメント(無し)
検索全文Elisp
要約

頻繁に入力する語の略称を自分で指定することができます.略称を指定することで,,長 い文字でも,簡単に入力できるようになります.

情報源

(emacs) Abbrevs(elisp) Abbrevs が参考になります.

何が問題なのか?

プログラムや文章の作成していると,同じ単語を何度も入力することが頻繁にあります. Emacs程度の短い単語ならともかく,もう少し長くなると入力は面倒になってきます.頻 繁に入力となると,スペルミスの可能性も高くなります.

何ができるのか?

abbrev (略語展開)とはあらかじめ設定しておいた略名を展開してくれる機能のことです. 例えば 「address」 を自分の住所に変換するといったことが可能になります.

設定済みMeadowでは

標準機能ですので,利用できます.また,下記で説明するキーバインドや略称の保存機能 も有効になっています.

インストール方法

Meadow に標準で付属しています.

設定方法

以下を .emacs に追加します

 
;; 保存先を指定する
(setq abbrev-file-name "~/.abbrev_defs")
;; 略称展開のキーバインドを指定する
(define-key esc-map  " " 'expand-abbrev) ;; M-SPC
;; 起動時に保存した略称を読み込む
(quietly-read-abbrev-file)
;; 略称を保存する
(setq save-abbrevs t)

詳しい使い方

略称展開の使い方は,まず略語を登録し,その後,その略語を入力して展開となります.

では,略語の登録の前にその基礎から説明していきます.

略語の基礎

略称展開というのは,「msと入力してMicrosoftと展開」ということを実現する機能です. 「mailで自分のメールアドレスを展開」という使い方もあるでしょう.

何を何に展開するか,それは自分で自由に選択できます.

でも,その略称は常に使わなければなりませんか?

違いますよね. メールを書く時.Cなどのプログラムを書く時.普通のテキストを書く時.

もちろん共通で使う略語もあるでしょうが,特定のテキストでしか使わない略称もあるの ではないでしょうか.

Emacsの略称展開は,こうした要望に答えるために,2つの登録先が用意されています.

1つはすべてのテキストで利用できる略称.もう一つは,登録したモードでしか利用でき ない略称です.

では,順に説明していきましょう.

略語の登録

最初に,設定したモードでしか利用できない略称の登録方法を説明します.

例えば,Microsoftの略称を設定するとしましょう.

カーソルを単語の後ろへ持っていきます.そして,C-x a + と入力します.する と,ミニバッファに

Mode abbrev for "Microsoft": 

と表示されますので,ここで「ms」のように略称を入力してRETを押します.これ で,略称の設定完了です.

ただし,この時登録される語はカーソル直前の単語になります.そのため,特に日本語で は,意図していない部分の略称設定になってしまいます.

そこで,リージョンで指定した範囲の略称を登録することができます.方法は,リージョ ンで略称を登録したい範囲を選択し,C-u 0 C-x a +と入力します.すると,リージョ ン内の言葉に対する略称を登録することができます.この時,改行があっても登録できま す.

次にどのモードでも利用できる略称設定方法を説明します.基本的な操作方法は,モード 固有の略称と同じですが,入力するキーだけが異なります.

どのモードでも利用できる略称を設定するには,C-x a g と入力します.リージョ ン内の文字の登録はC-u 0 C-x a gです.

略称の展開

略称を入力して,C-x a 'と入力します.すると,略称が展開されます.C-x a 'はちょっと入力が面倒ですから,上記の設定をしておきましょう.これなら, M-SPC で展開できますので,簡単に略称展開することができます.

しかし,略称展開するたびに M-SPC を入力するのも面倒です.

英語であれば通常はスペースや記号で区切られているわけですから,スペースを入力した 時に展開できると便利です.

そのような動作を実現するのが abbrev-mode です.M-x abbrev-mode で abbrev-mode にすると,略語の後に SPC を押すだけで展開できます.

ただし,「 name@」 のようにメールアドレスを入力しようとしても展開されてしまうと いうデメリットもあります.日本語ではあまり便利に感じないように思います.

略称の設定と展開のまとめ

略称の保存と編集

上記のように設定しれあれば,設定した略語は abbrev-file-name で設定したファイルに 保管されます.

保存された略称の編集は M-x edit-abbrevs で行うことができます. M-x edit-abbrevs を実行すると

(vc-annotate-mode-abbrev-table)

(vc-dired-mode-abbrev-table)

(php-mode-abbrev-table)

"while"        0    "while"                  c-electric-continued-statement
"else"         0    "else"                   c-electric-continued-statement

(global-abbrev-table)

"def"          9    "defun"
"ms"          0    "Microsoft"

のように登録された略称が表示されます.各モード毎の略称とどのモードでも利用できる 略称(グローバル(global)の略称)が表示されます.

この表示で,一番左の列が略称,2番目が略称を展開した回数,3番目が展開される文字に なります.この略称と展開される文字を直接編集すると,略称や展開される文字を変更す ることができます.変更が終わったら,C-c C-c として保存すると,その変更が適 用されます.

34.1.1 abbrev 関連の設定・標準付属の Elisp (2007/11/18)  
34.1.2 abbrev を拡張する非標準の Elisp (2007/11/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.1 abbrev 関連の設定・標準付属の Elisp (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev%20func"
"MeadowMemo/abbrev関連の設定・標準付属のElisp"へのコメント(無し)
検索全文Elisp

Meadow に標準で付属している Elisp や外部の Elisp を導入しなくても有効な abbrev に 関連した設定を紹介します.

34.1.1.1 勝手に abbrev を展開しないようにする (2007/11/18)  
34.1.1.2 abbrev を拡張する ― expand (2007/11/18)  
34.1.1.3 abbrev を利用して自動的に大文字に変換 (2007/11/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.1.1 勝手に abbrev を展開しないようにする (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=auto%20abbrev"
"MeadowMemo/勝手にabbrevを展開しないようにする"へのコメント(無し)
検索全文Elisp
要約

name@ のようにアルファベットの後に記号やスペースを入力すると, その前までを略語 と認識し展開されます.これは不要なことの方が多いので,設定で無効にします.

何が問題なのか?

abbrev-modeではスペースや @ など,単語の区切りと考えられる位置で,自動的に略称展 開を行います.しかし,「 name@zzz.com 」と入力しようとして,「 name@ 」と入力し たら,「名前@ 」と abbrev が展開されてしまったりして,面倒なことがあります.意図 しない時にされると,非常にいらいらするものです.

何ができるのか?

スペースや記号を入力した時に自動で展開する機能を無効にできます.

設定済みMeadowでは

設定しています.日本語入力だと不便だと思うことが多いので...

設定方法

この機能は変数 abbrev-mode の値が t になっていると,有効になります.このため,無 効にするためには, abbrev-mode を nil に設定します.ただし,単に,

 
(setq-default abbrev-mode nil)

としても,モードによっては上書きされてしまい,無効にはなってくれません.そのため, モード毎にフックを利用して設定する必要があります.

Meadow 全体でこの機能を無効にするためには,例えば,以下のようにします.

 
(add-hook 'pre-command-hook
          (lambda ()
            (setq abbrev-mode nil)))

これで,自動で展開されることはなくなります.もちろん通常通り,M-SPC などで 明示的に展開する際には abbrev を使うことができます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.1.2 abbrev を拡張する ― expand (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev%20expand"
"MeadowMemo/abbrevを拡張する―expand"へのコメント(無し)
検索全文Elisp

何が問題なのか?

abbrev は非常に便利です.しかし, defa に

(defadvice   (around   act)
  ""

  )

という略語を割り当てても,コメントの時でも展開されてしまい,使い勝手がよくありま せん.

しかも,展開後,カーソルが最後の「) 」の後に行ってしまいます.そのため,展開後に カーソルを適当な位置へ移動する必要があり,面倒です.

何ができるのか?

いくつかの略語を追加してくれます.例えば,上の例は「 defa 」の略語展開です.しか も,カーソルは展開後に defadvice の後へ移動してくれます.

さらに,これらの略語はコメント文では展開されません.

設定済みMeadowでは

設定していません

インストール方法は?

標準で附属しています.

設定と使い方は?

以下を.emacs に追加します.

 
(require 'expand)

ただし,これだけではあまり意味がありません.サンプルとして,

が用意されていますので,*scratch*に

(expand-add-abbrevs c-mode-abbrev-table
                    expand-c-sample-expand-list)
(expand-add-abbrevs lisp-interaction-mode-abbrev-table
                    expand-sample-lisp-mode-expand-list)
(expand-add-abbrevs emacs-lisp-mode-abbrev-table
                    expand-sample-lisp-mode-expand-list)
(expand-add-abbrevs lisp-mode-abbrev-table
                    expand-sample-lisp-mode-expand-list)
(expand-add-abbrevs cperl-mode-abbrev-table
                    expand-sample-perl-mode-expand-list)

のように書き,必要な行の最後でC-jとします.ただし,今までにそれぞれのモード略語を作ったこ とがないとエラーになりますので,必要な行のみにしてください.

これで,いくつかの略語が追加されます.例えば,

*scratch*で「 defa 」と書き,M-x expand-abbrev と入力すると,

(defadvice   (around   act)
  ""

  )

と展開され,カーソルは「 defadvice 」の後に移動します.

さらに,C-x a n を入力すると,カーソルは次の編集箇所へ移動します.C-x a p で一つ前の編集箇所に戻ります.

略語の追加方法は?

「 defu 」の略語は

 
(defconst expand-sample-lisp-mode-expand-list
  (list
   (list
    "defu"
    (concat
     "(defun   ()\n"
     "  \"\"\n"
     "  (interactive)\n"
     "  (let* (\n"
     "         )\n"
     "    \n"
     "    ))")
    (list 8 11 16 32 43 59))

となっています.最初の「 defu 」の部分が略語,「 concat 」の中が展開される部分に なります.これを実際に展開してみると,

(defun _ ()
  ""
  (interactive)
  (let* (
         )

    ))

となります.水色の部分はカーソルのある位置です.最初の「 (」から 8 文字目にあた ります.

続いて,C-x a nとしてみてください.そうすると,今度はピンクの位置へ移動し ます.これが, 11 文字目になります.さらに,C-x a nを入力すると, 16 , 32 , 43 , 59 文字目へと移動します.

つまり,「 defu 」の定義にあった数字はカーソルを移動する場所を表しているのです.

後は,自分の好きな略語とカーソル位置を作成し,

 
(setq my-lisp-mode-expand-list
  (list
   (list
    "defu"
    (concat
     "(defun   ()\n"
     "  \"\"\n"
     "  (interactive)\n"
     "  (let* (\n"
     "         )\n"
     "    \n"
     "    ))")
    (list 8 11 16 32 43 59))
   ))

のように,適当な変数に設定 (*scratch*にコピーして,C-j) し,

 
(expand-add-abbrevs lisp-mode-abbrev-table my-lisp-mode-expand-list)

を評価して, abbrev に追加しておきます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.1.3 abbrev を利用して自動的に大文字に変換 (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev%20capitalize"
"MeadowMemo/abbrevを利用して自動的に大文字に変換"へのコメント(無し)
検索全文Elisp

要約

文の始めなどの文字を小文字で入力しても,大文字に変換することができます.

何が問題なのか?

英語を書く場合,普通,文の最初の文字は大文字で始めます.また, I や Emacs などは 文の途中であっても大文字で書くのが普通です.

何ができるのか?

文の頭の文字などを小文字で書いても,自動的に大文字に変換してくれます.

設定済みMeadowでは

設定していません.

インストール方法

必ず text-mode で abbrev-mode をオンにしておきます. 具体的には

 
(add-hook 'text-mode-hook
          (function (lambda () (abbrev-mode 1))))

のように..emacsで設定しておきます.

また,34.1.1.1 勝手に abbrev を展開しないようにする (2007/11/18) の設定があると,上記の設定を追加しても,すぐにオフになっ てしまいます.そのため,34.1.1.1 勝手に abbrev を展開しないようにする (2007/11/18) で紹介した設定は消しておく必要がありま す.

設定方法

以下を.emacs に追加します.

 
(define-abbrev text-mode-abbrev-table "emacs" "Emacs")
(define-abbrev text-mode-abbrev-table "i" "I" #'abbrev-not-at-stop)
(define-abbrev text-mode-abbrev-table "i'm" "I'm") ; ... egocentric


(defun maybe-capitalize-bos ()
  "If point is at the end of the first word in a sentence, capitalize it."
  (if (= (point)
         (save-excursion
           (backward-sentence)
           (forward-word 1)
           (point)))
      (capitalize-word -1)))

;; Capitalize words at beginning of sentence.
(add-hook 'text-mode-hook (lambda ()
                            (make-local-hook 'pre-abbrev-expand-hook)
                            (add-hook 'pre-abbrev-expand-hook
                                      'maybe-capitalize-bos
                                      nil t)))

(defun abbrev-not-at-stop ()            ; avoid `i.e.' -> `I.e.'
  "Unexpand abbrev if it was just expanded by a full stop.
Intended as an abbrev hook function."
  (if (eq ?. last-command-char)
      (unexpand-abbrev)))

詳しい使い方

普通に文章を打つと,文章の頭の文字などを大文字に変換してくれます.

コメント

やっぱり abbrev ってのは英語入力には便利なんですね.日本語入力だとそれほどでもな いんですけどね.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.2 abbrev を拡張する非標準の Elisp (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev%20elisp"
"MeadowMemo/abbrevを拡張する非標準のElisp"へのコメント(無し)
検索全文Elisp

abbrev 関連でインストールが必要な Elisp を紹介します.

34.1.2.1 abbrev を補完入力 ― abbrev-complete (2007/11/18)  
34.1.2.2 abbrev の一覧をモードでソート ― abbrev-sort (2007/11/18)  
34.1.2.3 大文字が混じる文字を学習 ― StudlyCaps (2007/11/18)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.2.1 abbrev を補完入力 ― abbrev-complete (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=intel%20abbrev-mode"
"MeadowMemo/abbrevを補完入力―abbrev-complete"へのコメント(2007/12/28)
検索全文Elisp

何が問題なのか?

abbrev-mode は便利な機能なんですが,使いにくいです.なぜなら,対応する言葉をすべ て入力する必要があるからです.

例えば自分の住所を address に定義したら address とすべて入力しなければいけません. それは面倒だからといって add などと略したりすると,add という略語で登録したこと を忘れてしまい,結局展開できなくなってしまいます.

何ができるのか?

何も入力しないで, abbrev を展開しようとすると,

Click <mouse-2> on a completion to select it.
In this buffer, type RET to select the completion near point.

Possible completions are:
adress                      -> 住所
asahi                       -> 朝日新聞
defa                        -> (defadvice   (around   act)^J  ""^J    ^J
defc                        -> (defconst   nil^J  "")
defm                        -> (defmacro  ()^J  ""^J    (` ^J        ))
defs                        -> (defsubst   ()^J  ""^J    (interactive)^J
defu                        -> (defun   ()^J  ""^J    (interactive)^J
defv                        -> (defvar   nil^J  "")

のように補完候補が出力されます.これで,どんな略語があって,どう展開されるかがす ぐに分かります.

また,一文字入力した後で, abbrev を連続的に展開していくと,

a M-SPC
住所  M-SPC ← address の abbrev
朝日新聞  M-SPC ← asahi の abbrev
abbrev  M-SPC ← a の dabbrev
abbrev-complete-completion  M-SPC ← a の dabbrev

という風に展開できます. abbrev の候補がなくなれば, dabbrev で展開してくれます.

設定済みMeadowでは

利用できます.

インストール方法は?

abbrev-complete.el をダウ ンロードして,ロードパスの通ったところへコピーします.

設定方法は?

以下を.emacs に追加します.

 
(load "abbrev-complete")

詳しい使い方は?

基本的には普通にM-x expand-abbrevを行うだけです.

機能は?

適当な文字の後に \ をつけておくと,

a\ M-SPC
住所  M-SPC ← address の abbrev
朝日新聞  M-SPC ← asahi の abbrev
a\ M-SPC
住所  M-SPC ← address の abbrev

という風に, abbrev の候補だけを繰り返すことができます.

さらに, a- という風に - で終わると

a- M-SPC
abbrev  M-SPC ← a の dabbrev
abbrev-complete-completion  M-SPC ← a の dabbrev

という風に dabbrev だけを繰り返すこともできます.

設定できるものは?

User Option: abbrev-complete-use-hippie
デフォルトは nil

t なら, hippie-expand を利用した展開ができる.

ただし, hippie にも abbrev や dabbrev を利用した展開があるので,

 
(setq abbrev-complete-use-hippie t)
(setq hippie-expand-try-functions-list
      '(try-complete-file-name-partially
        try-complete-file-name
        try-expand-list
        try-expand-line
        try-complete-lisp-symbol-partially
        try-complete-lisp-symbol))

のように abbrev や dabbrev を利用した展開をしないようにしておく方がい い.

User Option: abbrev-complete-no-entry-dabbrev
t なら,候補がなければ dabbrev を行う (デフォルトは t)

User Option: abbrev-complete-show-completion
t なら補完候補を別ウィンドウに表示する.

'always なら,補完候補が 1 つでも別ウィンドウに表示する (デフォルト) .

'view なら,直前がスペースなどの時のみ別ウィンドウに表示

nil なら一切表示しない

User Option: abbrev-complete-word-seg
この変数で指定した文字の後で, abbrev を行うと一覧を表示する.デフォルトは "[ \"#$%&'()\=~]".

User Option: abbrev-complete-completion
デフォルトは t

仮りに def , dired , dabbrev という単語が abbrev に登録されていたとする.この 変数が nil なら d M-x expand-abbrev とすると, def , dired , dabbrev が 別ウィンドウに一覧表示される.

abbrev-complete-completion が t なら,一覧表示され,さらに, abbrev が 展開される.さらに,M-x expand-abbrev をすると, 次の候補である dired が展開される.

User Option: abbrev-complete-not-dabbrev-seg
デフォルトは [\\\\]

ここで指定した文字を最後に加えると, abbrev の候補だけを繰り返し展開す る.

User Option: abbrev-complete-not-abbrev-completion-seg
デフォルトは [-\"#\%&'()\=~]

例えば

abbrev-co M-SPC

のように, abbrev-complete-not-abbrev-completion-seg で指定した文字が 1 単語前に あると abbrev を行わない.

abbrev はこの場合 co をもとに展開するので,展開してくれてもあまりうれしくないた め,展開しないようにしました.

User Option: abbrev-complete-immediately-dabbrev-completion-seg
デフォルトは [-]

abb- M-SPC

のように,指定した文字を最後につけると abbrev は行わずに, abb の dabbrev のみを 行う.

User Option: abbrev-complete-add-region-to-abbrev
デフォルトは nil

普通,リージョンを選択した状態で abbrev を展開すると,リージョンは消される (デフォ ルト) .

しかし,これが「 t 」だと,リージョンを選択した状態で abbrev を展開しようとすると, リージョン内のテキストを別バッファにコピーします.

そこで,C-c C-cとすると,略語を追加できます.別バッファにコピーしてくれる ので,略語に追加する前に編集することもできます.

C-c C-qでキャンセルになります.

abbrev-complete の更新履歴



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.2.2 abbrev の一覧をモードでソート ― abbrev-sort (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=abbrev-sort"
"MeadowMemo/abbrevの一覧をモードでソート―abbrev-sort"へのコメント(無し)
検索全文Elisp

何が問題なのか?

M-x edit-abbrevs とすると, abbrev の定義一覧が表示されます.それぞれモード 毎にまとめられているのですが,モードの並び方はばらばらで探しにくいものです.

何ができるのか?

M-x edit-abbrevs での順番を global を一番最初にして,それ以外はモード名を アルファベット順に並び換えてくれます.

設定済みMeadowでは

利用できません.

インストール方法

abbrev-sort.el をダウンロード し,ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(require 'abbrev-sort)

詳しい使い方

まず,M-x abbrev-sort-mode とします.すると,ソートしてくれるモードになりま す.

この状態で,M-x edit-abbrevs とすると,出力がソートされて出力されます.

起動時からオンにするためには,以下を .emacs に追加します.

 
(abbrev-sort-mode 1)

うまく動かない

expand.el を使っているとエラーになります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.1.2.3 大文字が混じる文字を学習 ― StudlyCaps (2007/11/18)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=studlycaps"
"MeadowMemo/大文字が混じる文字を学習―StudlyCaps"へのコメント(無し)
検索全文Elisp
要約

StudlyCaps のように大文字が複数混じる文字を abbrev に登録し,入力ミスを防ぎます.

何が問題なのか?

「 YaTeX 」のように一単語に複数の大文字が混じった単語があります.このような単語は, 好みで大文字にしているわけではなく,大文字であることに意味があります.

しかし,大文字を入力するためには Shift を利用する必要があり,結構面倒なもの です.

何ができるのか?

バッファから文字を読み取り,大文字混じりの文字を読み取り abbrev に登録してくれます.

設定済みMeadowでは

利用できません.

インストール方法

StudlyCaps.el をダウン ロードしロードパスの通ったところへ置きます.

設定方法

.emacs に以下を追加します.

 
(require 'StudlyCaps)

詳しい使い方

適当なファイルを読み込み,M-x StudlyCaps-mode とします.すると,このモード になります.

で,その上で M-x StudlyCaps-scan-buffer とするとバッファから「大文字 1 文 字 + 小文字 1 文字以上 + 大文字 1 文字 + 大文字か小文字」という文字列を探し,こ の単語を abbrev に登録します.

例えば「 YaTeX 」なら「 yatex 」の abbrev として登録されます.このため, abbrev-mode がオンならば,「yatex SPC」で「 YaTeX 」と入力できるのです.

しかし,「 XEmacs 」のように大文字が複数あっても,最初の大文字の直後に小文字がない と登録されません.

どういう単語を登録するかは,

 
(setq StudlyCaps-regexp "\\b[A-Z][-_a-z]*[A-Z][-_A-Za-z]*")

の正規表現を設定することで,変更できます.

また,リアルタイムで登録するわけではありませんので,例えば .emacs で以下のように 設定しておきます.

 
(global-set-key [f6] 'StudlyCaps-add-word-at-point)

すると,f6 で,カーソル付近の単語を追加できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.2 何度も入力する文字を簡単に ― 動的略語展開 dabbrev (2008/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dabbrev"
"MeadowMemo/何度も入力する文字を簡単に―動的略語展開dabbrev"へのコメント(無し)
検索全文Elisp
要約

数文字入力して,この機能を使うと,バッファにある文字から,入力した文字で始まる単 語に展開してくれます.

何が問題なのか?

abbrevは確かに便利ですけど,これには登録が必要になります.しかし,展開するために, 毎回登録するのも面倒なものです.

また,あるテキストを編集する時にはよく出てくるけど,他の時には使わないなんてこと もありますね.こういう単語をすべて一律で登録すると,abbrevの使い勝手が悪化します.

何ができるのか?

現在開いているバッファから単語を検索して展開してくれます.

設定済みMeadowでは

標準機能ですので,利用できます.

インストール方法

Meadowの標準機能です.

設定方法

特に設定する必要はありません.

詳しい使い方

abbrev よりも,さらに便利な機能が dabbrev (動的略語展開) です.

これは今開いているバッファの中から補完できる候補を探して補完してくれます. 例えば chapter を一度入力したことがあって, もう一度入力したくなったとします.そんなとき は, cha M-/ と入力すると cha で始まる単語をバッファから探して補完してくれま す.M-/ を何度か入力すると次々と「cha」で始まる候補を探して展開してくれます.

さらに,C-M-/ で補完入力も可能です.例えば cha C-M-/ とすると, cha で始まる単語を別ウィンドウに一覧表示してくれます.

うまく動かない

そのままでは日本語ではうまく動きません.

34.2.1 日本語で dabbrev を使う ― dabbrev-ja (2007/12/22)  
34.2.2 該当箇所が強調される dabbrev ― dabbrev-highlight (2008/03/15)  
34.2.3 dabbrev 用のファイルを読み込む (2003/09/30)  
34.2.4 dabbrev の対象バッファをバッファにより切り替える (2003/09/21)  
34.2.5 dabbrevの補完候補を自動表示 (2004/11/13)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.2.1 日本語で dabbrev を使う ― dabbrev-ja (2007/12/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dabbrev-ja"
"MeadowMemo/日本語でdabbrevを使う―dabbrev-ja"へのコメント(無し)
検索全文Elisp

要約

日本語でも快適な動的略語展開を利用できます.

何が問題なのか?

dabbrev はとても便利な機能です.

でも,日本語を入力して,dabbrev のコマンドを実行すると,漢字との区切りなどをうま く認識してくれません.

何ができるのか?

日本語を入力して動的略語展開を実行しても,それなりの結果が得られます.

設定済みMeadowでは

設定していますので,普通に dabbrev (動的略語展開) を実行するだけです.

インストールと設定方法

dabbrev は非常に便利ですが,日本語で使おうとすると単語を切り分けることができず, まともに使うことができません.

そこで, dabbrev-ja という Elisp が便利です.これを使うと,日本語でもある程度切 り分けることができるようになります.

まず dabbrev-ja.el をダ ウンロードし,ロードパスの通ったところへ置きます.そして,以下を.emacs に追加しま す.

 
(load "dabbrev-ja")

これで,普通に dabbrev を行うと日本語でも便利に使うことができます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.2.2 該当箇所が強調される dabbrev ― dabbrev-highlight (2008/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dabbrev-highlight"
"MeadowMemo/該当箇所が強調されるdabbrev―dabbrev-highlight"へのコメント(無し)
検索全文Elisp

要約

dabbrev は現在バッファなどから自動的に補完してくれてとても便利な機能ですが,どこ から補完されたのか分かりません.そこで,このElispを使うと,どこから補完されたの か明示してくれます.

何が問題なのか?

dabbrev はとても便利な機能ですが,どこから補完されたのかよく分かりません.

何ができるのか?

どこから補完されたのか分かりやすくなります.

設定済みMeadowでは

設定済みです.

インストール方法

http://namazu.org/%7Etsuchiya/elisp/#dabbrev-highlight にある dabbrev-highlight.el をロードパスの通ったところに置きます.

設定方法

以下を .emacs に追加します.

 
(require 'dabbrev-highlight)

詳しい使い方

普通に dabbrev を実行すると,補完元を強調表示してくれます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.2.3 dabbrev 用のファイルを読み込む (2003/09/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dabbrev%20list"
"MeadowMemo/dabbrev用のファイルを読み込む"へのコメント(無し)
検索全文Elisp

要約

dabbrev で補完候補を探すファイルを読み込ませる方法.

何が問題なのか?

dabbrev での補完用に適当なファイルを読み込んでおくと,望み通りの補完ができる可能 性が高くなります.しかし,普通に読むと C-x b でのバッファ移動時に邪魔になっ てしまいます.

何ができるのか?

バッファ名が 「 *filename*」という風に最初がスペースになります.これだと, C-x b などの候補にならないため,普段は邪魔になりません.

設定方法

以下を.emacs に追加します.

 
(setq filename-for-abbrev '("~/TAGS" "~/list.txt"))

;;(defun find-file-for-abbrev ()
(progn
  (let ((list filename-for-abbrev) filename buf cbuf)
    (setq cbuf (current-buffer))
    (while list
      (setq filename (car list))
      (setq list (cdr list))
      (if (get-buffer filename)
          ()
        (progn
          (setq buf (find-file-noselect filename))
          (set-buffer buf)
          (rename-buffer
           (concat " *" (file-name-nondirectory filename) "*") t))))
    (set-buffer cbuf)))

詳しい使い方

Meadow を起動して,普通に dabbrev を実行するだけです.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.2.4 dabbrev の対象バッファをバッファにより切り替える (2003/09/21)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dabbrev%20ignored"
"MeadowMemo/dabbrevの対象バッファをバッファにより切り替える"へのコメント(無し)
検索全文Elisp

何が問題なのか?

dabbrev は非常に便利な機能です.

しかし, Elisp を開いて,ドキュメントを開いて, 2 ちゃんねるを見てということをしてい ると,探して欲しくないバッファまで dabbrev が文字を探しにいってしまいます.

何ができるのか?

dabbrev では

 
dabbrev-ignored-buffer-names '("*Messages*" "*Buffer List*")
dabbrev-ignored-buffer-regexps nil

の 2 つの変数により,検索対象となるバッファが決定されます.両方とも,対象としない バッファを設定できます.しかし, 2 ちゃんねるに書く時は 2 ちゃんねるのバッファだけを 対象としたいというようなことはできません.

そこで,この設定を使うと, 2 ちゃんねるに書く時は 2 ちゃんねるのバッファ, Elisp なら Elisp のバッファだけから探すようにできます.

設定方法

以下を.emacs に追加します.

 
(defvar *dabbrev-buffer-name-inclusion-list* '())
(defvar *dabbrev-buffer-name-exclusion-list* '())
(defun dabbrev-buffer-in-list-p (buffer-name buffer-name-regexps)
  (cond ((null buffer-name-regexps) nil)
        ((string-match  (car buffer-name-regexps) buffer-name) t)
        (t (dabbrev-buffer-in-list-p buffer-name (cdr buffer-name-regexps)))))

(defun dabbrev-filter-buffers (buffer-list)
  (let ((dabbrev-buffers nil))
    (while buffer-list
      (if (and (dabbrev-buffer-in-list-p (buffer-name (car buffer-list))
                                         *dabbrev-buffer-name-inclusion-list*)
               (not (dabbrev-buffer-in-list-p (buffer-name (car buffer-list))
                                              *dabbrev-buffer-name-exclusion-list*)))
          ()
        (setq dabbrev-buffers
              (cons (buffer-name (car buffer-list))
                    dabbrev-buffers)))
      (setq buffer-list (cdr buffer-list)))
    dabbrev-buffers))

(setq dabbrev-my-ignored-case
      '(
        ;; buffer-name include exclude
        ("scratch" ("texi") ("navi2ch" "gnus"))
        ("el" ("el") ())
        ("texi" ("texi") ())
        ("navi2ch" ("navi2ch") ())
        ("." ("^[^ ]+") ()) ;; Default
        ))

(defadvice dabbrev-expand (around dabbrev-ignored-buffer activate)
  ""
  (if (or (eq last-command 'abbrev-expand)
          (eq last-command 'dabbrev-expand))
      ()
    (let ((alist dabbrev-my-ignored-case)
          (case-fold-search t)
          (command nil)
          (name (buffer-name (current-buffer))))
      (while (and (not command) alist)
        (if (string-match (car (car alist)) name)
            (setq command (car (car alist))))
        (setq alist (cdr alist)))
      (setq *dabbrev-buffer-name-inclusion-list*
            (nth 1 (assoc command dabbrev-my-ignored-case)))
      (setq *dabbrev-buffer-name-exclusion-list*
            (nth 2 (assoc command dabbrev-my-ignored-case)))
      (setq dabbrev-ignored-buffer-names (dabbrev-filter-buffers (buffer-list)))
      ))
  ad-do-it
  )

詳しい使い方

これで, dabbrev を実行すると,現在のバッファ名に応じて適当なバッファだけから検索 してくれます.

バッファ名と検索対象のバッファは dabbrev-my-ignored-case で設定します.

 
(setq dabbrev-my-ignored-case
      '(
        ;; buffer-name include exclude
        ("scratch" ("texi") ("navi2ch" "gnus"))
        ;; バッファ名に scratch という文字を含んでいれば
        ;; texi をバッファ名に含むバッファのみを補完対象とし,
        ;; navi2ch や gnus をバッファ名に含むバッファは補完対象としない
        
        ))

ちなみに上から順番に探していきますんで,設定時には注意してください.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.2.5 dabbrevの補完候補を自動表示 (2004/11/13)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dabbrev-hover"
"MeadowMemo/dabbrevの補完候補を自動表示"へのコメント(無し)
検索全文Elisp
要約

dabbrevの補完第一候補をToolTipで表示します.一種の予測入力のように利用できます.

情報源

Meadow Memo Wiki への 書き込みから.

何が問題なのか?

dabbrev は非常に便利なのですが,補完される文字は予測できません.

何ができるのか?

数文字入力して,少し待つと補完できる文字がToolTipで表示されます.表示されるのは dabbrevで補完できる文字の最初の候補です.

候補が表示されている状態でTABを入力すると,補完できます.

設定済みMeadowでは

使用していませんので,自分でインストールをする必要があります.

インストール方法

http://gnufans.net/~deego/emacspub/lisp-mine/dabbrev-hover/ から dabbrev-hover.el をダウンロードします.そして,これをロードパスの通ったところへ 置きます.

設定方法

以下を .emacs に追加します.

 
(require 'dabbrev-hover)
(dabbrev-hover-install t t) ;; TABで補完決定&補完選択

詳しい使い方

英数字を数文字入力して少し待ちます.補完できる時にはToolTip に候補が表示されます. その候補でよければ,TABを押します.すると,補完できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3 様々な文字を補完する Elisp (2008/11/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=complete%20elisp"
"MeadowMemo/様々な文字を補完するElisp"へのコメント(無し)
検索全文Elisp

ここでは、各種の文字を補完するような Elisp を紹介します。

34.3.1 登録された URL を入力 ― quickurl (2003/07/29)  
34.3.2 パスや URL を補完 ― ac-mode (2003/10/25)  
34.3.3 abbrev や Lisp シンボルを補完 ― hippie-exp (2003/09/30)  
34.3.4 単語の補完 ― completion (2003/11/05)  
34.3.5 入力回数に応じて単語を補完― pabbrev (2003/11/26)  
34.3.6 ポップアップメニューで自動補完 ― auto-complete (2008/11/11)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3.1 登録された URL を入力 ― quickurl (2003/07/29)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=quickurl"
"MeadowMemo/登録されたURLを入力―quickurl"へのコメント(無し)
検索全文Elisp

コメント

Meadow に標準で付属するようになったので,とりあえず使ってみました.

よく使うのだけ入れておくと便利になるのかもしれない.そうすると,「 Meadow ML <URL:http://www.ysnb.net/meadow/> を見てください」とかが簡単に書けるわけだ.

といっても,登録が面倒なので,結局は, google で調べてしまう訳ですが...

何ができるのか?

;;; quickurl.el -- insert an URL based on text at point in buffer

登録された URL を簡単に入力することができます.

インストール方法

不要です.設定もいりません.

詳しい使い方

M-x quickurl-add-urlで URL を登録します.登録するのは,必須項目が Word (名前) と URL で,必須でない項目が Comment (メモ) になります.登録すると,~/.quickurls に情 報が保存されます.M-x quickurl-add-urlで登録しなくても,~/.quickurls を直 接編集することもできます.

登録後,その Word (名前) を書き,M-x quickurlとすると,

GNU <URL:http://www.gnu.org/>

のように URL を記入してくれます.

機能は以下の通り.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3.2 パスや URL を補完 ― ac-mode (2003/10/25)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ac%20mode"
"MeadowMemo/パスやURLを補完―ac-mode"へのコメント(無し)
検索全文Elisp

シェルスクリプトやプログラムなどでファイルのパスが書きたい時に便利なものです.ま たパスだけでなく,状況に応じて dabbrev などを行ってくれます.

ac-modeよりダウンロードできます.これを ロードパスの通ったところへ置き,以下を.emacs へ追加します.

 
(load "ac-mode")

M-x ac-modeでオン.TABで補完です.補完は自動的に書式を判断し,通常は インデント,パスらしきものがあればパスの補完をしてくれます.さらに, dabbrev に よる単語補完も行ってくれます.

常時オンにして,補完後カーソルの位置を最後に移動させるために,以下のように設定し ています.

 
(setq ac-mode-exception '(dired-mode hex-mode))
(add-hook 'find-file-hooks 'ac-mode-without-exception)
(setq ac-mode-goto-end-of-word t)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3.3 abbrev や Lisp シンボルを補完 ― hippie-exp (2003/09/30)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=hippie-exp"
"MeadowMemo/abbrevやLispシンボルを補完―hippie-exp"へのコメント(無し)
検索全文Elisp

Meadow には abbrev や dabbrev ,さらに, emacs-lisp-mode や lisp-interaction-mode での関数名の補完などの補完方法が用意されています.しかし, これらはすべて操作方法が異なり不便です,

そこで, hippie-exp というものが Meadow に標準で附属しています.これは, abbrev な どの補完方法を順番に行い,補完してくれます.

使い方は簡単で,適当な文字を入力して M-x hippie-expandとするだけです.

補完方法は

 
(defcustom hippie-expand-try-functions-list
  '(try-complete-file-name-partially
    try-complete-file-name
    try-expand-all-abbrevs
    try-expand-list
    try-expand-line
    try-expand-dabbrev
    try-expand-dabbrev-all-buffers
    try-expand-dabbrev-from-kill
    try-complete-lisp-symbol-partially
    try-complete-lisp-symbol))

のように定義されていますので,必要に応じて setq で変更しておくといいでしょう.

普段使うのであれば,以下のようにしてキーバインドを割り当てておきます,

 
(define-key esc-map  " " 'expand-abbrev) ;; M-SPC

ただし,補完方法が増えるということは,それだけ補完候補が増えることになるので,あ る程度入力しておいてから,補完するようにしないと,却って不便になってしまいます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3.4 単語の補完 ― completion (2003/11/05)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=completion"
"MeadowMemo/単語の補完―completion"へのコメント(無し)
検索全文Elisp

要約

dabbrrev のような補完を行う.さらに,補完が完了したものはファイルに保存される.

何ができるのか?

abbrev や dabbrev , hippie-expand の他に, Meadow には completion という補完が あります. completion の先頭行から引用すると,「 dynamic word-completion code 」 というものです.

要は単語を dabbrev のように拾って補完してくれる Elisp です. dabbrev との違いは, 補完したものをファイルに保存してくれる点です.そのため,よく補完するものに関して は,補完のためにファイルを読み込まなくても,うまく補完できるようになります.

インストール方法

Meadow に付属しています.

設定方法

以下を.emacs に追加します.

 
(dynamic-completion-mode)

詳しい使い方

ALT+RET で補完することができます.ただし,最低でも 3 文字入力していないと 補完できません.

また,モードによっては ALT+RET は別の機能が割り当てられているので,必要な らキーバインドを変えた方がいいでしょう.関数名は「 complete 」です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3.5 入力回数に応じて単語を補完― pabbrev (2003/11/26)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=pabbrev"
"MeadowMemo/入力回数に応じて単語を補完―pabbrev"へのコメント(無し)
検索全文Elisp
要約

文字を入力すると,その単語を記録し,次回入力時には即座に補完してくれます.また, 同じアルファベットから始まる単語では入力頻度の高い順に補完されます.

何ができるのか?

;; This program is free software; you can redistribute it and/or modify

と入力した後で,「 p 」と入力すると,

p[rogram]

と表示されます.ここで,TAB を入力すると補完できますし,別の単語を入力する こともできます.

また,この後で何度か「 prefix 」と入力していると,「 pr 」に対する補完候補が 「 program 」から「 prefix 」に変わります.

インストール方法

pabbrev.el をダウンロー ドし,ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(require 'pabbrev)

詳しい使い方

M-x pabbrev-mode でオンにし,文字を入力します.すると入力した文字を記録し, 補完できるようになります.ただし, pabbrev を利用できるのは M-x pabbrev-mode を行ったバッファのみになります.

すべてのバッファで pabbrev を使うには M-x global-pabbrev-mode とします.

また,いちいち文字を入力しなくても,M-x pabbrev-scavenge-bufferM-x pabbrev-scavenge-region でバッファ全体やリージョンの文字を記憶させるこ とができます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

34.3.6 ポップアップメニューで自動補完 ― auto-complete (2008/11/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=auto-complete"
"MeadowMemo/ポップアップメニューで自動補完―auto-complete"へのコメント(無し)
検索全文Elisp
要約

文字を入力すると,補完できる単語が表示されます.その中から選択すると,その単語を 入力できます.

何が問題なのか?

abbrev で補完はできますが,次の候補が何かはわかりません.

何ができるのか?

文字を入力すると,自動的に補完候補を表示してくれます.

設定済みMeadowでは

設定していません.

インストール方法

auto-complete.elからダ ウンロードしてロードパスの通ったところへ置きます.

設定方法

以下を,.emacs に追加します.

(require 'auto-complete)
(global-auto-complete-mode t)
;; Maybe default-enable-multibyte-characters is t by default
(setq default-enable-multibyte-characters t)

詳しい使い方

文字を入力すると,下の図のように,自動的に補完候補が表示されます.

補完候補がポップアップで表示される.

TAB を入力すると,次の候補が順番に選択され,RET を入力すると,今の候 補が入力されます.候補の選択はカーソルキーでもできます.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]