yasnippet 没有工作,大佬帮看看

这说明yas设置没问题,下一步是m-x company-yas,这是检查com yas的设置,按照company的逻辑,有些设置下,前边的backend找到了,就不会再找备用的,具体参考com的说明

你那个with,如果我没记错,就是设置备用,或者是排到最后

你要往下拖呀,yas提供的补全没在下边?

拉到底也没有for的snippet

嗯 看了下 好像是这个问题

代码片段这块和vim比弱了。。

如果vim用的挺好 为什么还要用emacs呢

这其实是个company对yasnippet的补全支持问题,和yasnippet本身倒关系不大。

之所以支持很基本,没有你截图中vim那么炫酷,主要还是使用群体的问题,我猜。估计和我类似,因为yasnippet比company出现早,很多人是不用company作yansippet key的补全的,因为如果常用的major mode下snippets太多了,会搞得补全列表很乱,而且早习惯了基本不用key补全(偶尔忘了也可以点菜单栏查下,最多多个重名key用complete-symbol在minibuffer里选选),于是开发者也不花时间搞好它了。所以补全的界面支持的确没有snippet移植到vim上那么好,而且emacs得自己整合,并不是默认的(好像complete-symbol对重名key是默认支持的(不重名直接tab补全snippet内容了),而auto-complete或company都得自己另设)。

不知道是不是想要这样的效果:

company

配置:


    (yc/defmacro yc/add-company-backends-with-yasnippet (&rest backends)
      `(set (make-local-variable 'company-backends)
            (push ',(append backends '(company-yasnippet :separate)) company-backends)))
    
    (use-package lsp-mode
      :custom
      (lsp-enable-indentation nil)
      (lsp-auto-configure nil)))
    
    (defun yc/lsp-adv (&rest args)
      "Advice for 'lsp': update company backends, and enable flyckcheck."
    
      ;; functions to run after lsp...
      (lsp-ui-flycheck-enable t)
      (yc/add-company-backends-with-yasnippet company-lsp)
      (flycheck-mode 1))
    
    (advice-add 'lsp :after #'yc/lsp-adv)

这是 lsp 启用后, company-backends的值:

((company-lsp company-yasnippet :separate) (company-keywords company-dabbrev-code company-yasnippet :separate) (company-files company-dabbrev company-abbrev :with company-yasnippet))

1 个赞

玩腻了。完了几年vim了插件也了几个了。

这就很麻烦,不是很清楚emacs的api,但是这几天配置的过程,代码片段需要和补全comgpany结合配置才能使用,vim只需要接管omi就可以 不管你有没有补全 snippet都可以用。两个东西互不干涉的。在emacs里这2个耦合度太高了。

差不多是这样的。

company-lsp-enable-snippet 这个设置放在init里试试 加点log,补全的时候把backends也打出来,看看实际补全的时候到底生效了没

company-lsp-enable-snippet 这个东西是加载server返回的snippet与yasnippet无关吧?lsp我去年就开始研究了。只不过之前一直用vim。所以这个设置不应该影响yasnippet 2个东西。不管在vim还是emacs。