如何把company的前端显示换成ivy?

比较喜欢ivy的补全样子

你是说 helm 换成 ivy 吧? company 和 ivy 有什么关系吗?

你基本上什么有用的信息都没提供,让别人怎么帮你?

刚看到这标题有点怀疑人生。

不要怀疑,helm-company这个函数是确实存在的(spacemacs)。如果你当前配置里没有当然也能很容易脑补出来:把company的小方格candidates换成helm的列表界面。

找到解决办法了吗?

  (global-set-key (kbd "H-f") 'counsel-company )

能不能做到不用按额外的键,company自动弹出补全列表的时候就是以ivy的格式?

应该有对应弹出pop-up的hook吧 不过我个人觉得这样很不方便。。minibuffer自己弹来弹去的。。辣眼睛。。

company/ivy 的好处是可以从容地输入关键字,进行过滤/选择,甚至可以用正则(例如查找一个包含 a 并且以 b 结尾的条目:a b$)。缺点底部冒出一个大大的列表,占地方,改变整个窗口布局,而且离光标很远。

overlay 的好处是不占地方,不改变窗口布局,而且就在光标旁边。缺点是必须顺序输入关键字,但是如果只记得中间某一部分关键字怎么办,也许可以模糊匹配,但还是不如 company/ivy 方便。

helm-company 没用过,但是我一直在用 helm-yasnippet(实在记不住各种模式下的代码片段的 key,只好用 helm 列出来查找),应该是类似的实现,其实使用频率最高的 M-x 就是这种形式了。ivy + company 实现起来应该比 helm+company 更简单一些。

最好的方式把 company/ivy 用 overlay 的形式,显示在光标旁边,又接受更灵活的输入。看到 ivy 的作者 abo-abo 发的一段视频 https://www.reddit.com/r/emacs/comments/57fnar/ivy_completion_at_point_in_an_overlay/ 就是这个效果,可以在补全列表 overlay 弹出来之后,输入以空格间隔的多个关键字,不知道是不是现在 ivy 已经支持了?

在开启company-mode的情况下用completion-at-point 应该就行

1 个赞

Overlay有一点不好。。buffer里如果有不同height/family的字体。。那画面太美冇眼看。。

发现ivy里的overlay会把原始内容往下推,所以不会受字体影响

于是改写了一下(counsel-company)

  • 添加了查看Documentation的M-o action
  • YASnippet 自动展开
  • 使用(ivy-display-function-overlay) 显示candidates

https://gist.github.com/fuxialexander/1fe5b40ce6ae9964e1fd8c5849d3ba21