Emacs 打开 C/C++ header file 有什么办法或者插件么?

#include<iostream>
#include<stdio.h>
#include"Sqstack.h"
#include <stack>

比如上述的include头文件,有什么办法跳转打开标准库头文件以及项目下的头文件? 试过gtags,ctags之类的,貌似设置等等都挺麻烦,还配置不好。semantic好像也有这个功能,但是不会用。 如果大家推荐插件,最好能贴以下自己的配置,设置之类的。网上找了一些教程,弄不起来。好纠结,就没个简单的插件能够直接做这个跳转打开功能么?我想Emacs是应该有的,可能是我不知道而已。

通过lsp 连接clangd或者ccls可以。

可以看看这个 Emacs C++, opening corresponding header file

根据自己项目配置相应查找目录,我的配置如下:

    (local-set-key (kbd "C-x C-o") 'ff-find-other-file)
    (setq ff-quiet-mode t)
    ;; 找不到同名文件时不创建
    (setq ff-always-try-to-create nil)
    (setq cc-search-directories '("."
                                  "/usr/include"
                                  "/usr/local/include/*"
                                  "../*/include"
                                  "../*/src"
                                  "$PROJECT/include"
                                  "$PROJECT/src"
                                  "/usr/local/opt/llvm/include/c++/v1"
                                  ))

这个我试了不行,说找不到 iostream 是不是还有什么其他需要设置的?

lsp 我试试 谢谢

这个 lsp-mode 对单文件的 C++ 源代码文件,应该怎么操作?具体哪个命令执行搜索打开头文件的?我搜索了Emacs命令 lsp header, lsp switch, lsp file, lsp find 等,都没找到打开头文件的命令。试了 lsp-find-declaration 命令,提示错误:

lsp--send-request-async: The connected server(s) does not support method textDocument/definition
To find out what capabilities support your server use ‘M-x lsp-describe-session’ and expand the capabilities section.

我没有用lsp-mode,你可以查询下论坛中大佬的配置。我用的是猫哥写的nox 这个lsp客户端连接clangd,如果你也想用nox,可以直接参考作者的emacs配置。 或者你直接用Clangd官网推荐的eglot也行,https://clangd.llvm.org/installation.html,官网有具体配置方法,设置也简单。 nox相当于eglot的简化版,比较简洁。

2 个赞

好的,感谢。我去看看