更新2021/10/18: 几个要注意的点截图:https://gitee.com/guyuming76/personal/commit/a285e1fc0d5be92e6e7a7a3bd1a2ebd8a8d9798c
----------------------------------------------------分割线下是过去的内容--------------------------------------
这两天刚学会用 emacs 读 C/C++ 项目代码,记录下踩过的坑。
主要是跟着 https://emacs-lsp.github.io/lsp-mode/tutorials/CPP-guide/ (下面称作原文)配的,系统环境是 ubuntu 20.04。
原文直接用 emacs 打开 emacs 源码来演示功能,而我希望打开 https://github.com/neutrinolabs/pulseaudio-module-xrdp ,所以一开始没有下载 emacs 的源码,而是直接 sudo apt install emacs, 装的是 26.3 版。
把原文 lsp-mode configuration 那段里面的 lisp 代码,贴进 ~/.emacs , 重启 emacs 后,打开 c 语言文件,想尝试 go to definition, find reference 等功能,却发现一个类似 “找不到编译数据库” 错,原来 lsp-mode 需要一个 compile_commands.json 文件, 如何生成? 先 sudo apt install bear , 然后在你原先运行 make 的目录下面运行 bear make, 就会在目录里产生这样一个文件。
然而,go to definition, find reference 功能还是不行,在标识符上点鼠标右键,根本不会出现包含这些功能的上下文菜单。一筹莫展,在网上狂搜,受启发运行了一下 which clangd, 结果返回空。
原来原文给过这样一个链接: https://clangd.llvm.org/installation.html ,教我在ubuntu 下
sudo apt-get install clangd-9。
我卸了clangd-9, 重新 sudo apt install clangd, 过了一关。
这里要提一下 emacs 菜单里面一堆的 buffer 子菜单,我一开始觉得莫名奇妙,后来发觉原来除了我打开的文件,系统产生的各种消息提示(日志?)也在这里,发觉系统有啥不对劲的时候可以先把各个buffer 看一遍。很多软件都是出问题后半天不知道日志文件在哪里。
但是,find reference 貌似还是不行,显示如下:
后来,网上下载了 emacs-27.1.tar.x