どうも”おもり”です。
前回に引き続き、emacsの補完機能について書いて行きます。
#company
コーディング中の補完についてはcompanyを使用します。
私はMSYS2での開発構築をしているため、下記のコマンドを使用してcmakeをインストールしましょう。
MSYS2でのemacsの導入については私の以前の記事が参考になるかもしれません。
MSYS2でemacs生活開始
https://qiita.com/RIO18020/items/2ef7a4973384463d554e
pasman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-i686-cmake
#clanのインストール
pasman -S mingw-w64-x86_64-clang
pacman -S mingw-w64-i686-clang
#ironyのインストール
M-X packge-install [RET] irony, M-X packge-install [RET] company-irony
によってironyをインストールしましょう。
ironyとはC/C++でコーディングするときに補完などを行うときに必要になります。インストール後にinit.elに下記を追加する。
(use-package irony
:defer t
:commands irony-mode
:init
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'c++-mode-hook 'irony-mode)
:config
;; C言語用にコンパイルオプションを設定する.
(add-hook 'c-mode-hook
'(lambda ()
(setq irony-additional-clang-options '("-std=c11" "-Wall" "-Wextra"))))
;; C++言語用にコンパイルオプションを設定する.
(add-hook 'c++-mode-hook
'(lambda ()
(setq irony-additional-clang-options '("-std=c++14" "-Wall" "-Wextra"))))
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
;; Windows環境でパフォーマンスを落とす要因を回避.
(when (boundp 'w32-pipe-read-delay)
(setq w32-pipe-read-delay 0))
;; バッファサイズ設定(default:4KB -> 64KB)
(when (boundp 'w32-pipe-buffer-size)
(setq irony-server-w32-pipe-buffer-size (* 64 1024)))
)
(use-package company-irony
:defer t
:config
;; companyの補完のバックエンドにironyを使用する.
(add-to-list 'company-backends '(company-irony-c-headers company-irony))
)
その他、C++で書いていく時に入れておく&設定しておくと便利な設定を下に書いておきます。
(require 'cc-mode)
;; c-modeやc++-modeなどcc-modeベースのモード共通の設定
(add-hook
'c-mode-common-hook
(lambda ()
;; k&rスタイルをベースにする
(c-set-style "k&r")
;; スペースでインデントをする
(setq indent-tabs-mode nil)
;; インデント幅を2にする
(setq c-basic-offset 2)
;; 自動改行(auto-new-line)と
;; 連続する空白の一括削除(hungry-delete)を
;; 有効にする
(c-toggle-auto-hungry-state 1)
;; CamelCaseの語でも単語単位に分解して編集する
;; GtkWindow => Gtk Window
;; EmacsFrameClass => Emacs Frame Class
;; NSGraphicsContext => NS Graphics Context
(subword-mode 1)
))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
;; undo-tree
(require 'undo-tree)
(global-undo-tree-mode)
;; flycheck
(require 'package)
(global-flycheck-mode)
(require 'google-c-style)
(defun cc-mode-init ()
(google-set-c-style)
(setq indent-tabs-mode t)
(setq c-basic-offset 4)
(c-set-offset 'case-label 0)
)
以上の設定から実現された補完の様子を、「emacsにモダンなエディタに負けない補完機能を...(1)」で記述した同じ内容を書きながら確認してみましょう。QtCreatorとの比較になります。
https://qiita.com/RIO18020/items/57abac4ededf9b426cf1
includeの記述は補完されないのだが。。。
補完が出るのが少し遅いのと、Ctrl+Alt+iを入力しないと補完候補が出てこないのも不満である。
QtCreatorを越えることができてねー。。。
まだまだ修行が必要ですな。以下の書籍などから情報を調べながら育て上げていこうと思う。
良いものが見つかったら記事も更新して行きます。
- Emacsに関して購入した書籍リスト
- Emacs実践入門 ~思考を直感的にコード化し、開発を加速する
- Emacsテクニックバイブル ~作業効率をカイゼンする200の技~
- 入門 GNU Emacs