让company-yasnippet更好的工作

没错啊,company-yasnippet的函数 company-yasnippet--candidates 是从yasnippet抓取的,通过的 (yas--get-snippet-tables).

我知道 这个出来的东西很多 有mode 我在想怎么获取这个

这里是mode。。 image

这样找 mode 肯定最准确,不过我觉得搞复杂了,因为还有 parent modes。当前显示的 snippet 就是符合当前 mode 以及 parent modes 的,不如简单点就用 major-mode 先试试。像 prog-mode 之类的本来也没有高亮,设置了也意义不大。如果不符合需求了再用这个方法取。

有问题这样。因为web-mode 下是不会高亮的。应该是html-mode 直接获取major-mode 对于html文件就丢失了

用了个比较傻逼的方法。判断了下重新赋值。。不知道其他的major有没有这样的类似问题哎。。那个hastable也不太好弄解出来的key是累加的根据buffer的major mode。。没啥好思路。emacs还是不太熟悉勉强就能做这样了。

test1

1 个赞

你们怎么搞的这么复杂, 如果我想 expand 使用 yas, 我就是简单的输入 key, 如果出来补全, 我会 C-g, 取消, 然后 TAB, 一定是 yas.

我也希望有个更好的协同工作方式, 不过, 似乎除了 yas 换绑成其他键, 没有其他更好的办法, 以前用 AC 的时候, 可以先 TAB 用 AC 自动补全 key, 然后, 再 TAB, 就展开 snippet 了. 但是最近切换到 company, 不知道是不是能否配置成这样?

1 个赞

我把complete-xxx-idle 设置成0.3 如果输入snippet 在补全还没出来之前 tab展开snippet 当然这要比较熟悉snippet

你这样很熟悉的,其实压根就不需要 company-yasnippet。一般它是和其他company backend混合,比如 company-capf,这种时候用于区别候选项,annotation和snippet展开信息就比较有用了,尤其是snippet不熟悉的,或者有很多相似snippet的用户。我就是这样的人,Org Mode下有很多Babel的snippet,用于展开不同的设置。不是经常用,难免忘记,我目前是用 ivy-yasnippet,虽然也挺好用,但是能够在 company 里的话还是更好的。

单独给complete-yasnippet绑定一个快捷键就行了,比如backtab

可以试试 counsel-company, 我设置成输入模式下快速按fg 启动,从一个用户那里学到的。

1 个赞

等company 合并了。

Tab 的时候有 yas 就调用 yas, 没有 yas 就调用 company,在缩进当中就调整缩进。

但是后来我觉得按 Tab 去补全是很蠢的一件事,补全列表让他自动出来感觉更合理。

我有点看迷糊了。。整体的解决就是实现了和我vim一样的效果。想用snippet就和正常补全一样使用,输入key 会在补全里出来回车确定 同时也不会让yasnippet扰乱lsp或者其他的使用completion-at-point-function的后端。在点之后不会显示任何yasnippet。然后优化了下加上doc显示snippet的展开。我觉得这才是正常的方式。

我确实是没用 :rofl:

pr 合并了。 更新就company 就可以了

2 个赞

Great!

请教下,你那个 auto-complete like 的 doc string 是怎么显示出来的?

是用 company-quickhelp 这个插件吗?

我是这个效果, 是不是哪里不对。

顺便问下,你是怎么截图的,我只要一按快捷键,doc pop 窗口就消失了 …

companydoc

你也可以用company-box,(另外github上还有一个叫company-doc的插件,意外搜索到的,没用过)。BTW,这种截图可以用延时,然后进入Emacs,让截图软件自动截图。