【问题标题】:using emacs semantic with ede and company-mode to complete and navigate使用带有 ede 和公司模式的 emacs 语义来完成和导航
【发布时间】:2017-06-26 05:28:15
【问题描述】:

我按照 http://tuhdo.github.io/c-ide.html#orgheadline33 教程使用 emacs 构建了一个 c/c++ IDE。

但是,我在使用语义来完成公司模式和导航时遇到问题。问题是,当我试图告诉语义其他库或代码在哪里使用语义添加系统包含时,它仅适用于 c++ 包含。

如果我添加 (semantic-add-system-include "~/mylib"),语义不会解析 ~/mylib 中的文件,因此公司将无法工作。但是如果我使用(semantic-add-system-include "/usr/include/c++/4.5.2/") 这将起作用。如何使其与其他代码或标头一起使用?

我也尝试过使用 EDE。我的项目目录是这样的:

/project root  
    /lib1  
    /lib2   

我试过了

(ede-cpp-root-project "myproject"
                      :file "/home/user/myproject/Makefile"
                      :include-path '("/lib1"
                                      "/lib2")
                      )

(ede-cpp-root-project "myproject"
                      :file "/home/user/myproject/Makefile"
                      :system-include-path '("/home/user")
                      )

但是,当我输入时

#include <myproject/lib1/xx.h>

在我的源文件中,语义不会解析正确的文件并提供完整的候选。

我只想在输入#include &lt;myproject/lib1/xx.h&gt; 时语义解析正确的文件。我可以通过语义或/和 EDE 实现这一目标吗?

【问题讨论】:

    标签: c++ emacs


    【解决方案1】:

    我的semantic-mode-hook 中有类似以下内容。变量semantic-dependency-system-include-path 是本地模式。尝试在下面重新定义your-c-include-dirsyour-c++-include-dirs

    (defun your-semantic-hook ()
      ;; these are buffer-local
      (mapc (lambda (dir)
              (semantic-add-system-include dir 'c-mode))
            your-c-include-dirs)
      (mapc (lambda (dir)
              (semantic-add-system-include dir 'c++-mode))
            your-c++-include-dirs))
    
    (add-hook 'semantic-mode-hook 'your-semantic-hook)
    

    【讨论】:

    • 感谢您的回答 jenesaisquoi。对不起,我不熟悉elisp。我刚刚用"/home/user/mylib" 之类的目录重新放置了your-c++-include-dirs,当我重新启动emacs 时出现错误。错误的类型参数:stringp,47。我不知道这是什么意思。我的代码正确吗?顺便说一句,由于这个功能使系统包含文件缓冲区本地,我不能为不同的项目指定不同的包含文件。这令人沮丧。
    • 将其定义为列表,例如'("~/mylib" "blah/blah")。该变量已在库中定义为缓冲区局部变量,此函数不是那样的。如果您有项目特定的目录,您可以使用 .dir-locals.el 或其他项目变量方法。
    • 我重试了 EDE 方法,它成功了。它失败了,因为我在一个 .h 文件中测试完成,该文件默认由 emacs 以 c 模式打开。在我将 .h 文件的默认模式更改为 c++ 模式后,EDE 运行良好。对于semantic-add-system-include 的问题,我尝试了你的add-hook 方法。我定义了一个函数来执行我的semantic-add-system-include 命令,并在语义模式初始化时对其进行评估并且它可以工作。不知道为什么不能直接写在init.el中。无论如何,非常感谢。
    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多