ivy相对于Helm的优点?


#1

我是Helm前身Anything的三个开发者之一,我相信 Anything 是最早提倡多后端智能补全的项目。 自然而然也坚持用Helm,因为Helm其实就是重构版的Anything,用法和细节都一模一样。

我喜欢Helm的优点:简单易扩展,底部补全窗口不会跳来跳去的,闪眼睛。

同时也觉得 ivy 的作者更能折腾,经常跟新一些小玩意也非常有意思。 看看论坛的坛友,用ivy的人超级多。

我知道在设计上,Helm和ivy都是利用多个后端,然后通过模糊匹配来做智能过滤,所以本质上两个插件都能够满足要求。

但是,我想请教一下大家, ivy 相对于 Helm 的优点有哪些? 请大家只说优点,最好是两种都深入用过的朋友多说说,我也向大家学习一下。


#2

很早用 ivy,然后看着 helm 很漂亮,很全面,转了过去,前不久又转回了 ivy(用腻了换一换,有点新鲜感)

主要就是主体东西少一些,分开的小东西多一些(如果这也算优点的话),无论是 ivy 还是 helm 的很大一部分功能我用不到,也不会用。最主要的就是 M-x/buffer/rg ,使用起来也没有多少区别。

很多人说 helm 比 ivy 慢,不过就我实际用下来看,现在并没有显著的区别。


#3

你确定你说的是 ivy 的优点? :slight_smile:


#4

嘛,对于喜欢分开的人来说,就是w

不过,现在真感觉不到特别大的竞争力了。


#5

ivy使用minibuffer进行补全, helm用完后总是会产生很多 heml-* 的buffer很烦。 从功能上来说helm更强大, 最初一直在用helm,后来转ivy了, 最初是因为helm用久了emacs会莫名卡、慢。转到ivy后, 明显emacs用起来卡顿少很多了。

已经有1年没用helm了。 除了轻巧之外 ivy从设计上讲并不比helm好。


#6

ivy我用了两年,helm有尝试过大概3个月左右,最后还是选择ivy的原因有几点

  1. helm有太多我根本用不到的功能,作为一个极简主义者看了很难受

  2. ivy 的 API比 helm更简单(根据Ivy User Manual,整个ivy的API就一个ivy-read,够简单了吧哈哈)

  3. minibuffer相比正常buffer行为更容易预测(这点很主观,很多人也会反驳helm使用正常buffer更灵活)

  4. helm目前处于bug fix但不积极开发的阶段,ivy目前都还是很积极的加新功能

  5. swiper的速度比helm-swoop快一些

  6. 我是abo abo的忠实粉丝


#7

有时候你提供一个 list 给补全框架本身就很耗时,也就是我们说的卡界面。

所以Anything和Helm做了很多工作,即使超级耗时的补全结果都会先把一部分列表显示出来,然后边搜索边过滤。

我其实更好奇的是,那些 ivy 的小细节打动了大家?


#8

作为还在用 2011 年旧笔记本电脑的人,最大感受是 helm 太慢了,C-x C-f~/ 需要花费数秒才有响应,ivy 瞬间完成。


#9

ivy api确实比helm简单很多,和自带的completing-read差不多,不像helm有学习门槛


#10

Helm 也许功能更强一点,但 Ivy 简单啊,看下 key bindings 就差不多了解个七七八八了,就算记不住那些高级用法的按键,开个 Hydra 菜单也都基本能搞定了,这点很人性化,你能记住那些按键很好,但记不住也不强迫你。


#11

我也是从helm转到ivy的,主要还是外观和速度吧,总感觉使用minibuffer会更炫酷一些,还有就是

  1. 在使用 helm 时, 首次打开会很慢(我在打开 emacs 后,习惯使用 helm-recentf 打开最近文件, 但不知道为什么,第一次会非常慢);另外, 打开 emacs 后, 必须先使用 helm-recentf 才能激活 helm , 如果使用其它 helm 命令, 比如 helm-M-x 或者 helm-projectile 只会使用默认的 ido , 并不能激活 helm
  2. helm 真的为用户做出太多选择, 想要自定义非常难

之前也写过两篇对比:
helm与ivy简单对比.html
自定义helm式的ivy.html


#12

看你的文章,你最后不是选择了 helm 吗?怎么那么快就叛变革命了?


#13

生命不止,折腾不息 :joy:

折腾了几天,发现ivy其实也挺好的,后面 自定义helm式的ivy.html也是因为用helm习惯了,想把helm的习惯带到ivy里去


#14

从ido,anything,helm到ivy一路用过来的。之前用ido最长时间,也是因为anything/helm太过笨重,用久了就会卡。直到ivy的出现。怎么说呢?ivy API设计非常出色,稳定简洁,易于扩展。功能介于ido和helm之间,尤其swiper,大大提高了搜索的体验。counsel就是向第三方借鉴的一个lib,很多好玩的功能都能加进去。总结下,简洁快速,易于扩展,用户体验出色。这些都打动了我。helm进步也不小,但是笨重的历史包袱是很难改变了,你看看配置完打开后占用内存就知道了。ido其实体验也很好,只是功能确实偏少,尤其occur之类的无法集成到一起。

最早Centuar保留三个补全框架(ido/helm/ivy),现在只留下了ivy,都是基于上述的原因吧。


#15

我用helm,ivy代码确实简洁,但是有不少问题:

  1. 与emacs内置的icomplete冲突报错,需要关闭icomplete,因为都用了minibuf的什么hook,而helm没这问题。提过issue,作者说没法解决。

  2. 个人感觉,使用minibuf相当不优雅,minibuf变那么大,好像一个怪物。而helm可以使用窗口,独立frame,窗口还可以动态切换(c-t)为平放,竖放(可以显示更多内容,比如显示outline或函数列表时很方便)

  3. helm选择界面的headline效果很好,清晰,ivy好像没有

  4. helm的多列显示比较有用,能看到更多信息,ivy好像不支持,窗口很宽时,补全窗口右边空荡荡的,效果不好

关于两者的速度,之前有个emacs的bug导致helm慢了200毫秒,那个问题解决后,一点感觉不到慢了。我有台2009年的笔记本,helm体验ok。

关于helm的臃肿,代码确实臃肿,特别是文件和buffer的补全,几乎把所有的helm文件都require了,没法精简。我自己不用他的文件和buffer补全(主要是这两种更习惯ido),只用其他功能以及自己增加的一些补全,把文件和buffer相关的el都删了,把imenu和recentf的修改了一下,不依赖文件和buffer。有点暴力,但ivy的体验确实习惯不了,只好这么折腾。

aboabo的东西我都用过好几次,发现一直都习惯不了,ivy由于以上几个原因,swiper眼花缭乱的感觉也不喜欢,avy不常用没安装(装了ace不怎么用),hydra几乎不用,最后发现这位大神的东西一个也不合我胃口,一个也没用上,功能上都很强,就是风格上和使用体验上不太喜欢,或者用不到。也不是helm先入为主,我用helm很晚,当时ivy已存在,当时已做对比。

跑题了,算是体验对比。


#16

我用ivy,因为我老担心helm的窗口四处乱串,心里压力大


#17

其实是很固定的,而且完全控制在你手里,哈哈


#18

ivy 简单快和emacs有一体化的感觉(对我来说) 本身的功能就是增强emacs体验,易扩展。


#19

我现在两个都有在用, helm-ag + rg backend来做搜索,其他所有的都用ivy, ivy也有helm-ag类似的功能,但是少一些feature,没去折腾了。

我觉得最好用的两个是:

ivy-occur :

https://oremacs.com/2015/11/04/ivy-occur/

ivy-action:

https://oremacs.com/2015/07/23/ivy-multiaction/ https://oremacs.com/2015/08/05/swiper-0.6.0/


#20

以前电脑配置低,helm在第一次启动时要卡一下(配置高的电脑感觉不出来),而ivy不卡,所以就用ivy了。