c-c++ 使用了 ccls 之后,感觉Ysnippet不工作了?

就连 基本的 while, if 都没有代码块生成了,有什么特别的配置吗?

我也是这个问题, 而且我不能补全private和protected成员函数

  • 我的emacs是26.3
  • spacemacs版本是:1aa0af2 2019-06-26 | Move indirect buffer key bindings to SPC b N prefix (HEAD -> develop) (syl20bnr),

排查两点:

  1. 你确定有snippets存在么?前段时间yasnippet更新后,就不再默认提供snippets了(好像分拆到一个独立包提供snippets)。你点菜单栏Yasnippet,看看是不是真的还有snippets存在。

  2. 你使用yas-expand试一下,是否可以展开snippet。如果可以,那就是你按键tab或别的什么快捷键的绑定问题了。

注释掉下面的东西就可以自动补全了, 说明跟ccls是相关的

c-c++-backend 'lsp-ccls
c-c++-lsp-executable(file-truename "~/ccls/Release/ccls")

那你算是排查了第1点了,那第2点呢?如果可以,那就是按键绑定的问题而已(而并非冲突),你fix一下或者绑个新的就好了。

如果第二点不工作,你确认下yasnippet是不是在你的c++mode中正常加载了

你混淆了两件不同的事:

  1. yasnippet 不工作
  2. 自动补全不提供 yasnippet 项

看起来 ccls 独占了补全后端,你如果不喜欢这个设置,可以把 company-yasnippet 加回去。

这两个无法协同工作吗?

应该先确定问题在哪里。

  1. 打开文件,启动 lsp

  2. 参考 @oracleyue #3 楼的步骤确定 yasnippet 没有问题。

  3. M-: (setq-local company-backends '((company-capf :with company-yasnippet))) 临时加入 yasnippet 补全后端。

  4. 输入 if 然后再 M-x company-indent-or-complete-common 看看补全里面有没有 yasnippet 项。

1赞