company-lsp 终于来了

你看下这个字符串是不是来自 smartparens

这个包有点功能,但是自动补齐括号这种功能我觉得特别烦

估计你是用了延迟加载的功能?在lsp-cquery-enable之前强制(require 'company-lsp)试试?

字符串应该是来自这个包,但是把这个包exclude之后,提示的message没有了,但是补全的状态是一样的,还是被截断。

这个好像没什么效果,我是按照 @MaskRay 的配置抄了一个layer,用use-package加载的

二分法,专治疑难杂症。

我现在的水平只能抄抄配置,二分法什么的根本不知道从哪里下手 :joy:

不需要二分,这个情况我见过,是company-lsp的snippet支持没有开启导致的。

原因是(require 'company-lsp)发生在(lsp-cquery-enable)之后,没有把snippet的支持传给cquery。cquery在客户端不支持snippet的情况下对于任何函数都只补全左括号。

把你的cquery和company-lsp配置贴上来看看,按我之前说的应该是可以解决的。

这里是我抄的一个layer,用来配置cquery的。spacemacs的配置也是这个仓库的上级目录

(add-hook 'c-mode-common-hook 'lsp-cquery-enable)

这句改成

(add-hook 'c-mode-common-hook
  (lambda ()
    (require 'company-lsp)
    (lsp-cquery-enable)))
1 个赞

修改了之后没有效果。。

去掉这一行

company-lsp-enable-snippet nil

这次可以了,需要同时实现上面两个修改才能正常。我看参数说明以为company-lsp-enable-snippet只是不展开yas-snippet的东西,是理解错误了吗?

另外还有一个问题,每次输入#的项目,都会弹出头文件的自动补全,但有的时候如#define#if这种是不需要进行头文件补全展开的,而且每次弹出补全列表之前都会卡很久,所以像输入

#define MAX_BUFFER_SIZE  1024

这种东西时会变得非常困难。。。

snippetSupport 为 false 则遇到第一个 placeholder 结束(tri-state)

Sorry, 我有点不太明白, 这个链接是修复问题的PR吗? 还是本来期待的行为就是以前那样的?

这里有个概念没说明白的地方。company-lsp的snippet指的是展开LSP返回的snippet,而不是yasnippet自带的snippet。你打开后应该就看到cquery函数补全的效果了,也就是readme截图里的效果。之所以提到yasnippet是因为使用了yasnippet来实现这个功能。

1 个赞

还有一个问题是, 当company找不到和输入相匹配的补全项时, 会弹出一个默认的补全列表. 我期望的效果是找不到匹配的内容就不要弹出东西了, 有办法配置成这样吗?

最近修了几个bug,更新一下看看?

1 个赞

我是刚刚在github上更新的cquery, 通过spacemacsmelpa上更新的lsp-mode company-lsp等包, 依然有前面提到的问题, 这里是个演示: replay

我最主要的问题是, 一旦在一个稍微大一些的工程里面进行这种操作, 弹出列表之后emacs会变得非常的卡, 让我很难受…

更新一下状态: 将上面几个包更新过后, 不设置异步补全 (;; (setq company-lsp-async t)) 的时候emacs卡顿的问题没有了, 打开这个注释后才会卡顿. 更新之前是同步就卡, 异步更卡… 我的系统是装在移动硬盘里的, 不知道是不是补全的时候会大量操作硬盘读写

有可能自动补全这么受欢迎的原因之一是绝大多数人打字太慢了...

1 个赞

懒惰是程序员的优良品德, 能按3个键就完成的事情我绝对不会按4个…

1 个赞

主要是怕打错

1 个赞