【问题标题】:How can I use eval-after-load for c/c++ mode settings in emacs?如何在 emacs 中使用 eval-after-load 进行 c/c++ 模式设置?
【发布时间】:2013-04-23 20:57:15
【问题描述】:

我希望在 c-mode/c++-mode 中为ffap-c-path 添加额外的路径,我更喜欢惰性加载机制。我有两个选择:

  • add-hook 用于c-mode-hook/c++-mode-hook
  • eval-after-load

但正如@sanityinc 在this page 中所说,似乎后者更好。所以我添加如下代码:

(eval-after-load 'cc-mode
'(progn
  (require 'ffap)
  (setq fap-c-path (append ffap-c-path '("/usr/lib/llvm-3.1/include")))
  )
)

但是当我后来打开一个 c 源文件并发现 fap-c-path 仍然是旧值时。根据文档,如果cc-mode 是库/功能,我可以使用eval-after-load 'cc-modeeval-after-load "cc-mode";但在这里都不起作用。我查看了定义cc-mode的源代码,发现它使用cc-provide代替,这是根本原因吗?

顺便说一句:我也尝试了add-hook 方法;新路径确实会附加,但每次我打开另一个 c/c++ 文件时,代码都会执行一次,最后ffap-c-path 包含许多重复的路径。

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    您将ffap-c-path 拼错为fap-c-path

    使用add-to-list 会更好,它实际上处理重复条目,只有在新列表项不存在时才添加它。

    【讨论】:

      【解决方案2】:

      您可能想改用add-to-list

      (eval-after-load 'cc-mode
        '(progn
           (require 'ffap)
           (add-to-list 'ffap-c-path "/usr/lib/llvm-3.1/include")))
      

      这样,您就可以保证不会插入重复的值。

      【讨论】:

      • 感谢您的建议,我会记住的。但这次是因为我的错字。
      猜你喜欢
      • 2014-12-07
      • 1970-01-01
      • 2018-03-05
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多