Help us understand the problem. What is going on with this article?

emacsのコード補完ツールcompany-modeの設定備忘

More than 1 year has passed since last update.

はじめに

emacsでコードを書くときに補完機能があると便利ですね。
現在主流なのがauto-completeとcompany-modeあたりだと思います。
これまではauto-completeを使用していたのですが、最近company-modeを導入し、思いの外軽くて使いやすいかったので乗り換えようかなと思っている今日この頃です。

company-modeの導入記事は既に沢山ありそうだったので、ここでは備忘も兼ねて設定をまとめておこうと思います。

【参考】
emacsの補完用パッケージcompany-mode

設定したこと

init.elには基本的なキーバインドと挙動を記述してあります。
あと私はC-hがバックスペースなのですが、company補完時だとドキュメントの呼び出し機能ととぶつかってしまいました。ドキュメントの呼び出しは頻繁でないので、C-Shift-hに設定しました。

※ 当初company.elを直接編集してキーバインドを変更していましたが、メンテナンス性の観点からinit.elに設定を集約させるべきとのご指摘を頂きましたので修正致しました。

init.el
(with-eval-after-load 'company
      (setq company-auto-expand t) ;; 1個目を自動的に補完
      (setq company-transformers '(company-sort-by-backend-importance)) ;; ソート順
      (setq company-idle-delay 0) ; 遅延なしにすぐ表示
      (setq company-minimum-prefix-length 2) ; デフォルトは4
      (setq company-selection-wrap-around t) ; 候補の最後の次は先頭に戻る
      (setq completion-ignore-case t)
      (setq company-dabbrev-downcase nil)
      (global-set-key (kbd "C-M-i") 'company-complete)
      ;; C-n, C-pで補完候補を次/前の候補を選択
      (define-key company-active-map (kbd "C-n") 'company-select-next)
      (define-key company-active-map (kbd "C-p") 'company-select-previous)
      (define-key company-active-map [tab] 'company-complete-selection) ;; TABで候補を設定
      (define-key company-active-map (kbd "C-h") nil) ;; C-hはバックスペース割当のため無効化
      (define-key company-active-map (kbd "C-S-h") 'company-show-doc-buffer) ;; ドキュメント表示はC-Shift-h

      ;; 未選択項目
      (set-face-attribute 'company-tooltip nil
                  :foreground "#36c6b0" :background "#244f36")
      ;; 未選択項目&一致文字
      (set-face-attribute 'company-tooltip-common nil
                    :foreground "white" :background "#244f36")
      ;; 選択項目
      (set-face-attribute 'company-tooltip-selection nil
                  :foreground "#a1ffcd" :background "#007771")
      ;; 選択項目&一致文字
      (set-face-attribute 'company-tooltip-common-selection nil
                    :foreground "white" :background "#007771")
      ;; スクロールバー
      (set-face-attribute 'company-scrollbar-fg nil
                  :background "#4cd0c1")
      ;; スクロールバー背景
      (set-face-attribute 'company-scrollbar-bg nil
                  :background "#002b37")
      )
kod314
インフラエンジニア。趣味で機械学習をお勉強中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away