0

我正在尝试微调包含emacs prelude的 emacs 设置。我想作为flycheckcppcheck的默认检查器,并默认为GNU Global激活ggtags。我主要编写 C++ 代码。它以前对变量有效,但现在似乎不再有效。ggtags-mode

(load "/home/user/.emacs.d/init.el")


(defun my-c-mode-common-hook ()
  "Hook for all c derived modes."
  (c-add-style "my-style"
           '("stroustrup"
             (c-offsets-alist
              (innamespace . [0])
              (inline-open . 0)
              (inher-cont . c-lineup-multi-inher)
              (arglist-cont-nonempty . +)
              (template-args-cont . +))))
(setq c-default-style "my-style")
(when (derived-mode-p 'c-mode 'c++-mode)
(ggtags-mode 1)
(flycheck-select-checker "c/c++-cppcheck"))
)


 (add-hook 'c-mode-common-hook
      (my-c-mode-common-hook))

我有一个警告说the following functions are not known to be defined: ggtags-mode, flycheck-select-checker。但是在加载.emacs文件时加载,没有错误。

谁能帮助我以正确的方式使这两种次要模式正确配置?对我来说,这似乎是正确的做法,但显然我错过了一些东西。

4

1 回答 1

1

你使用add-hook错误:它需要一个函数作为第二个参数,但是你在那里调用你的函数,因此将值(flycheck-select-checker ..)作为函数传递。您可能会在 C (C/Java/C++/AWK/...) 模式下看到错误。

你需要做的是(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

此外,此代码将永远不会被执行:

(when (derived-mode-p 'c-mode 'c++-mode)
  (ggtags-mode 1)
  (flycheck-select-checker "c/c++-cppcheck"))

因为'c-mode不是派生自'c++-mode,我想您想检查当前的主要模式是否派生自c++-mode

(when (derived-mode-p major-mode 'c++-mode)
  (ggtags-mode 1)
  (flycheck-select-checker "c/c++-cppcheck"))
于 2013-10-17T18:12:22.110 回答