概要
irony-modeは,clangを使ってC/C++を書くときに色々と賢いことをしてくれるマイナーモード.
company-ironyは,company-modeでironyの補完を使うためのbackend.
emacsのバージョンは24.4以降推奨.
インストール
MELPAからインストール可能.
M-x package-install RET irony RET
M-x package-install RET company-irony RET
設定
(require 'irony)
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'objc-mode-hook 'irony-mode)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
(add-to-list 'company-backends 'company-irony) ; backend追加
irony-cdb-autosetup-compile-options
は,compile_commands.json
からコンパイルオプションを取得するためのもの.
自分は,常に適用するコンパイルオプションを設定したかったので,以下のようにした.
(setq irony-lang-compile-option-alist
'((c++-mode . ("c++" "-std=c++11" "-lstdc++" "-lm"))
(c-mode . ("c"))
(objc-mode . '("objective-c"))))
(defun irony--lang-compile-option ()
(irony--awhen (cdr-safe (assq major-mode irony-lang-compile-option-alist))
(append '("-x") it)))
irony-lang-compile-option-alist
で言語ごとのコンパイルオプションをリスト形式で設定する.
この形式にするため,irony--lang-compile-option
も変更する必要があった.
もっといい方法があれば教えて下さい.
また,yasnipetをインストールして
(yas-global-mode)
とすれば上のスクリーンキャストのように引数をいい具合に展開してくれる.
(2015/08/02追記)
コンパイルオプションの設定に対して @KazuSoap さんからコメントを頂きました。
以下のような設定が良いとのことです。情報ありがとうございます。
詳しくはコメントを参照ください。
;; 連想リストの中身を文字列のリストに変更せず、変数そのままの構造を利用。
;; 複数のコンパイルオプションはスペースで区切る
(setq irony-lang-compile-option-alist
(quote ((c++-mode . "c++ -std=c++11 -lstdc++")
(c-mode . "c")
(objc-mode . "objective-c"))))
;; アドバイスによって関数を再定義。
;; split-string によって文字列をスペース区切りでリストに変換
;; (24.4以降 新アドバイス使用)
(defun ad-irony--lang-compile-option ()
(defvar irony-lang-compile-option-alist)
(let ((it (cdr-safe (assq major-mode irony-lang-compile-option-alist))))
(when it (append '("-x") (split-string it "\s")))))
(advice-add 'irony--lang-compile-option :override #'ad-irony--lang-compile-option)
;; (24.3以前 旧アドバイス使用)
(defadvice irony--lang-compile-option (around ad-irony--lang-compile-option activate)
(defvar irony-lang-compile-option-alist)
(let ((it (cdr-safe (assq major-mode irony-lang-compile-option-alist))))
(when it (append '("-x") (split-string it "\s")))))
使い方
初回実行時のみ,
M-x irony-install-server RET
でirony-serverをインストールする.
irony-serverがインストールされる場所はirony-server-install-prefix
で指定できる.
あとは適当にprefixを打てばcompanyが補完候補を表示してくれるはず.