Emacsの補完機能(動的略語展開)をいろいろ試してみる(主にdabbrev-expand-multiple.el, auto-complete.el)

Emacsのデフォルトの補完機能であるdabbrev-expand(M-/)を使っていた。しかしながら、いまいち何が補完されるかわからなく使い勝手が悪い。そこで補完の一覧が出るdabbrev-expandの拡張であるdabbrev-expand-multiple.elと"Emacsのための最も賢い補完機能"が売りのauto-completeを使ってみた。


1日ずつ色々設定を変更して試してみた。


インストール方法は簡単。dabbrev-expand-multiple.elをpathの通った場所(~/.emacs.d/)等において
;.emacs.dにパスが通ってなかったら書く
;(add-to-list 'load-path "~/.emacs.d/")
(require 'dabbrev-expand-multiple)
(global-set-key (kbd "M-SPC") 'dabbrev-expand-multiple)


.emacsに書くだけ。


最終的なdabbrev-expand-multipleの設定は以下。


(require 'dabbrev-expand-multiple)
(global-set-key [tab] 'dabbrev-expand-multiple)
;;minibufferの補完機能はデフォルトのTABの補完を使う
(define-key minibuffer-local-completion-map [(tab)] 'minibuffer-complete)
(setq dabbrev-expand-multiple-select-keys '("a" "s" "d" "f" "g"))
(add-to-list 'dabbrev-expand-multiple-multi-selection-keys "/")
(add-to-list 'dabbrev-expand-multiple-next-keys "n")
(add-to-list 'dabbrev-expand-multiple-previous-keys "p")
;; The seconds in which tooltip is displayed.
;; setting to disappear at ten seconds.
;; Change inline display face. 'underline, nil
(setq dabbrev-expand-multiple-inline-show-face 'underline)
;; for nil, use inline display. for t, use tooltip
(setq dabbrev-expand-multiple-use-tooltip nil)


デフォルトではtabと\C-iは同じキーとして認識されるが、
上記のようにtabを設定するとtabキーだけ変更でき、\C-iは変更されない。
補完機能としてはよいのだが、ターミナル上のemacsではこのtabが認識されないのが、問題点。


次にauto-complete。
インストール方法はauto-completeのホームページAuto Complete Mode - GNU Emacsのための最も賢い自動補完機能に書いてあるので省略


auto-complete設定は以下の設定


(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
;オートでメニューを表示しない。(メニューがちらつくとうざい)
(setq ac-auto-show-menu nil)
;helpを表示しない。
(setq ac-use-quick-help nil)
;補完候補の色設定
(set-face-foreground 'ac-completion-face "black")
(set-face-background 'ac-completion-face "white")


最初メニューがちらつくのがうざかったが、消せるのがわかった。こうするとかなり使いやすい。
また、キー入力後しか補完しないのがいい。入力後以外ならtabキーで普通にindentしてくれる。
さらに、補完候補のカスタマイズもしやすそうである。


二つを比べた結果、今のところauto-completeで行こうかなと思う。