計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

Emacsでcompanyを使う

company

Emacsの補完用パッケージ。今までauto-completeを使っていたが、elpyはcompanyを使うようなので乗り換えた。設定が少し難しかったがなんとか便利に使えるようになった。

設定

インストールはpackage.elを使えば良い。use-packageを使っているのでその設定。

;;; company (melpa-stable)
(use-package company
  :ensure t
  :pin melpa-stable
  :demand
  :bind (("<tab>" . company-indent-or-complete-common)
         :map company-active-map
         ("C-p" . company-select-previous)
         ("C-n" . company-select-next))
  :config
  (global-company-mode)
  (setq company-idle-delay 0)    ; 遅延なし
  (setq company-selection-wrap-around t)    ; 候補の最後の次は先頭に戻る
  (setq completion-ignore-case t)
  (setq company-dabbrev-downcase nil)
  (setq company-backends '((company-capf company-dabbrev)
                           ;;company-bbdb
                           ;;company-eclim
                           company-semantic
                           ;;company-clang
                           ;;company-xcode
                           ;;company-cmake
                           company-files
                           (company-dabbrev-code company-gtags
                                                 company-etags company-keywords)
                           ;;company-oddmuse
                           )))

tabキーにcompany-indent-or-complete-commonを設定しておくと、補完するときは補完で、インデントするときはインデントしてくれるので便利。

補完の候補の選択をC-pC-nに変更。

いちばんややこしいのがcompany-backendsの設定。デフォルト設定では、カレントバッファに書いた単語などを補完してくれない。companyではcompany-backendsで指定されたバックエンドを前から順番に探し、一致した?バックエンドを使うらしい。

例えばinit.elなどを編集する時、elispなどのプログラミングで使うバックエンド(company-capf)が選択されて、カレントバッファの語句を動的に補完するバックエンド(company-dabbrev)が使われない。これは使いにくいので上記のように変更した。カッコで(company-capf company-dabbrev)のようにして、リストの先頭にもっていった。カッコでくくると一つのバックエンドのように扱ってくれるので、こうしておくとバッファの語句もプログラミング言語予約語なども補完候補になる。デフォルトで設定されていたよくわからないバックエンドはコメントアウトしておいた。