company-yasnippet 在补全提示中显示不出来

这个就是最大问题,如果在开始输入类或者对象名时出现 snippet 是对的,但是我想补全成员函数或者属性,这时候来一大堆模板,你会奔溃的。。。

1 个赞

那不是添乱嘛

我认为在开始输入类或对象名的时侯出现 snippet 都是干扰。

简单的 snippet 例如 f if for 之类的,各个语言下都一样,早就熟记了。名称长/少用的 snippet,打开 helm/ivy 查询更省心 。因为 snippet 有 key 和 name 属性,通常我 key 用缩写,name 全称带注释,搜索的时侯就查找 name 里的关键字。

1 个赞

我也是用helm,常用的片段可以用hippie expand展开,也挺方便的

大家用过 Visual Studio 或者 VSCode 吗?尤其是 VS+VAX 的补全体验,真的是让人欲罢不能。里面同样也有 snippet template,非常智能。

2 个赞

老兄觉得有没可能用lsp智能控制company-yas?

不过可能要大改comapany

昨天我就说过这个了哈,没找到太好的思路。应该还是有办法的,就是不知道改造难度大不大。

可能需要给company给写个新后端,包含lsp和yas,然后内部自己调整控制。

直接改造company-lsp?也许可行,需要研究下代码。但是,其他 mode 呢?比如 elisp。。。

lsp 不应该知道 company 的存在,要修改的话,只能在 company 这一端,我写了个简单的 advice 来阻止 company-yasnippet:

(define-advice company-yasnippet (:around (fn command &optional arg &rest ignore)
                                          inhibit-when-entering-member-name)
  (let* ((pt (car (bounds-of-thing-at-point 'word)))
         (ch (char-before pt)))
    (if (or (eql ch 32)
            (eql pt (point-min))
            (eql pt (point-at-bol)))
        (funcall fn command arg ignore))))

输入类或对象名字的时侯就无法判断了,也只有敲键盘的人才知道想要补全什么吧。

@seagle0128 改造的任务就交给其大佬吧。

不是有company-lsp吗?知道两边的东东