我的配置,我平时也用写一点 c,规模不大. init-c-c++.el
:
rtags
代替 ctag
gtag
实现 reference
, definition
等的跳转,irony-mode
改善 c/c++
的编码体验,cmake-ide
,cmake-mode
集成rtags
以及cmake
实现IDE 的build 和index.
;;; package --- Summary:
;;; Commentary:
;;; Code:
(use-package irony
:ensure t
:init (progn
(defun samray/irony-mode-hook ()
(define-key irony-mode-map [remap completion-at-point] 'counsel-irony)
(define-key irony-mode-map [remap complete-symbol] 'counsel-irony))
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'irony-mode-hook 'samray/irony-mode-hook)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
)
(use-package clang-format
:ensure t
:commands (clang-format-region clang-format-buffer)
)
(use-package cmake-ide
:ensure t
:init (progn
(add-hook 'c++-mode-hook (lambda () (cmake-ide-setup)))
(add-hook 'c-mode-hook (lambda () (cmake-ide-setup)))
)
)
(use-package cmake-mode
:ensure t
:mode (
("CMakeLists\\.txt\\'" . cmake-mode)
("\\.cmake\\'" . cmake-mode)
))
(use-package rtags
:ensure t
:init (progn
(setq rtags-completions-enabled t)
(eval-after-load 'company
'(add-to-list
'company-backends 'company-rtags))
;; (setq rtags-autostart-diagnostics t)
(rtags-enable-standard-keybindings)
)
)
;;; Tell emacs to open .h file in C++ mode
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
(provide 'init-c-c++)
;;; init-c-c++.el ends here
使用flycheck
和flycheck-irony
做syntax check
init-syntax-check.el
;;; package --- Summary:
;;; Commentary:
;;; Code:
(use-package flycheck
:ensure t
:demand t
:config(progn
(setq flycheck-mode-line-prefix "FC")
(global-flycheck-mode t)))
(use-package flycheck-irony
:ensure t
:defer t
:init (progn
(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)
))
(add-hook 'c++-mode-hook (lambda ()
(setq flycheck-clang-language-standard "c++11")
(setq irony-additional-clang-options '("-std=c++11"))
))
(provide 'init-syntax-checking)
;;; init-syntax-checking.el ends here
代码补全部分:company
驱动,其他的注释也挺清楚了
;;; C/C++ headers completion
(use-package company-c-headers
:ensure t
:defer t
:init (progn (add-hook 'c-mode-hook
(lambda () (add-to-list 'company-backends 'company-c-headers))
)
(add-hook 'c++-mode-hook
(lambda () (add-to-list 'company-backends 'company-c-headers)))
)
)
;;; backends for irony
(use-package company-irony
:ensure t
:defer t
:init (progn (add-hook 'c-mode-hook
(lambda () (add-to-list 'company-backends 'company-irony)))
(add-hook 'c++-mode-hook
(lambda () (add-to-list 'company-backends 'company-irony)))
))
;;; backends for irony-c-header
(use-package company-irony-c-headers
:ensure t
:defer t
:init (progn (add-hook 'c-mode-hook
(lambda () (add-to-list 'company-backends 'company-irony-c-headers)))
(add-hook 'c++-mode-hook
(lambda () (add-to-list 'company-backends 'company-irony-c-headers)))
))
我的 全部Emacs 配置
一位大佬的教程: https://tuhdo.github.io/c-ide.html