年轻人估计无法想象老一輩 emacs 用户写代码连高亮都不用开(
大神就在坛子里
我的项目用clangd怎么补全跳转都有问题,好多符号找不到,用ccls就没问题
功能好像还挺全面的
我也没用过这两个😄,好像是多年不更新了。
还是用 LSP 方便一些。
追问一下,我看emcas-lsp repo下除了lsp-mode外还有一个叫emacs-ccls的mode,他们俩都是lsp的client吗,只不过后者为了ccls设计的?
emacs-ccls 依赖于lsp-mode,支持C++的客户端
我能理解成,功能更专一(c++)的lsp客户端吗
当年的 font-lock 真的太差了,即使有 lazy-lock 也没法用
font-lock是什么?
就是语法高亮啊
为啥叫这个名字?
不为啥,排版术语
ccls的作者佛系维护,目前只是保证ccls可以在最新版的LLVM下编译成功,但是实现了很多写c++很有用的扩展,具体可以看wiki。clangd的补全速度比ccls快,补全的项目比ccls多一点(绝大部分时候ccls也不差什么,而且clangd的补全花里胡哨的 ),而且有一些比如自动引入头文件、高亮buffer中的代码、内置clang-tidy等实用功能。讲道理,前几年ccls对比clangd还是有很多杀手级的特性优势,现在随着clangd的不断完善两者的基本没有差距了,用哪个属于个人体验和癖好的范畴。
有可能是你的代码用到了较高的C++版本,默认好像是用的 C++11。
可以在项目目录下建立一个 .clangd 文件,并添加配置来启用更高版本的 C++ 标准。详细设置可以参考clangd的官方文档。
比如我要启用 C++ 20 标准, 可以在 .clangd 文件中加入以下内容:
CompileFlags: # Tweak the parse settings
Add: [-std=c++20] # treat all files as C++, enable more warnings
Compiler: clang++ # Change argv[0] of compile flags to `clang++`
我的经验ccls比clangd快的多 (eglot + ccls, working on linux kernel),而且jump to reference什么的稳定很多,特别是在有non-self contained header上目前clangd完全无法处理,ccls有一些heuristic稍微好一点。
不过我自己的用法比较奇葩,我会把整个project都先用ccls index完才开始做事,所以参考性可能低一点。
BTW,您说clangd/ccls不符合要求,但是CEDET/Semantic可以,具体大概是什么情况呢?
很好奇你们 ccls 怎么用的? 编译导出的 compile_commands.json 只包含 cpp、cu 文件,然后我会用 compdb 把 header 也包进去,这样索引会全面些。
缺点是包进去了 header,索引会变慢,另外一个问题是最新的 lsp-mode 包,会默认开启 ref 功能,就是一个变量或者函数被索引了多少次,这时候编辑 header 文件巨卡…
应该是这个 lsp-lens-enable
变量控制的,关了就好
BTW,您说clangd/ccls不符合要求,但是CEDET/Semantic可以,具体大概是什么情况呢?
具体情况比较复杂,目前不方便解释。