• 作成:

emacsの自動補完をauto-completeからcompany-modeに移行しようとしましたがやめました

新しい言語の補完が大概company-modeにしか対応していないため, company-modeに移行しようとしましたがやめました.

設定ファイルは以下のような感じでした.

;; -*- lexical-binding: t -*-

(require 'company)
(require 'company-quickhelp)

(global-company-mode t)
(company-quickhelp-mode t)

(custom-set-variables
 '(company-dabbrev-other-buffers 'all)
 '(company-dabbrev-code-other-buffers 'all)
 )

(define-key company-active-map (kbd "M-n") 'company-select-next)
(define-key company-active-map (kbd "M-t") 'company-select-previous)
(define-key company-search-map (kbd "M-n") 'company-select-next)
(define-key company-search-map (kbd "M-t") 'company-select-previous)

auto-completeよりC++の補完が優れているなあと思いました.

auto-completeもちゃんと設定すれば同じぐらいのことは出来るのかもしれませんが, デフォルトで設定されているのが楽ですね.

反面, 困ったことがあって, company-modeはインテリセンス補完が自動的に有効になっていて, 基本的に1つのバックエンドしか利用しないため, 適当に他のバッファから単語を取ってきて補完する機能が弱いです.

私はauto-completeでは最後のソースにac-source-words-in-all-bufferを指定することでこれを実現していました.

company-modeではそれはcompany-dabbrevに値するようですが, 複数のバックエンドを取り扱う力が弱いのか, 他に優先されるバックエンドがあるとdabbrevを中々参照してくれません.

仕方がないのでcompany-dabbrevを実行するキーバインドをCtrl-Shift-tabに設定しました.

(global-set-key (kbd "<C-iso-lefttab>") 'company-dabbrev)
(global-set-key (kbd "C-<tab>") 'company-complete)

指がつりそうなキーバインドですが, インテリセンスな補完のためには仕方がない.

と思って移行しようとしたのですが, 一番書くHaskellのコードを開いてみたら補完がyasnippetのものだけになって, dabbrevも使い物にならなくなったので, 結局移行するのはやめることにしました.

問題が解決したら移行するかもしれません.

追記

Interoが賢いcompany-mode向けの補完を提供するようになったので移行するかもしれません.