Table of Contents
我为什么放弃ivy回到了helm
说一说ivy用的不爽的地方吧
counsel-find-file
counsel-find-file作为最常用的命令,ivy竟然没有把默认的find-file进行覆写,比如我在dired中想要复制文件,我习惯使用C-h
退回上一个目录,但即使我之前已经设置了
:map counsel-find-file-map ("C-h" . counsel-up-directory)
但只有在使用counsel-find-file
时有效,类似dired中是无效的,相比较于helm-find-files
把find-file
进行覆写,无论何时都能使用自己自定义的按键,这很不爽
tab键
在helm中,tab仅作为补全使用,想要打开选中项,则需要按一下enter
键,而在ivy中,我不知道开发者怎么想的, 我需要记住两个或两个以上的按键。
在ivy中,tab键就像命令名称ivy-alt-done
一样,意味着按一下tab,就能得到helm中tab and enter的效果。
这很方便是不是?
但是,如果我要在emacs中重命名一个文件,把aaa.py重命名为aaa.py.bak,这该怎么办,在helm中我可以很容易的重命名,因为tab只是补全,我在tab后输入.bak然后enter就行,在ivy中,我得一个字符一个字符手打,或者记住其它按键补全选中项,然后才能重命名
记忆多个按键
ivy有这样一个问题,它不会像helm一样在第一行显示用户输入的字符,在ivy的很多issue中都有人提了这个问题,如果当前目录下有名为aaa的目录,这是我想要创建一个aaa.py的文件,ivy会列出aaa这个目录,那是我该怎么创建aaa.py文件。方法是一个新的命令ivy-immediate-done
,而不是ivy-alt-done
模糊搜索
在helm中我可以很容易的使用模糊搜索,ivy中也一样,只要简单的设置
(setq ivy-re-builders-alist '((t . ivy--regex-fuzzy)))
但ivy中有这样一个问题,空格键不能在模糊匹配中使用,/汗,作为从helm转入ivy的人,经常会不经意间在输入时按下空格键,然后,What? ivy中搜索变成空了
候选词按使用频率排序
helm默认支持,但在ivy中我需要安装smex,只安装smex,又不需要什么配置,文档也没有提供(这是我摸索出来的),有些莫名其妙
minibuffer
这是我对ivy种草的原因,从minibuffer中弹出待选项,多么帅气,哪里像helm,使用一个buffer作为弹出框,还带一个"丑丑"的mode-line,但后面仔细研究后,才发现helm从当前buffer中弹出helm-buffer是多么明智的选择,视野不会移动到当前buffer以外的地方,尤其是在屏幕较大的时候
dired中复制或重命名文件
我之前想要复制或重命名一个文件,只要进入dired中按C
或R
,然后选择目标就行,但不知道为什么,使用ivy时复制重命名总是报错,不成功(后面也没有继续折腾)
sudo edit
我从spacemacs中复制了一段代码
(defun file/sudo-edit (&optional arg) (interactive "p") (let ((fname (if (or arg (not buffer-file-name)) (read-file-name "File: ") buffer-file-name))) (find-file (cond ((string-match-p "^/ssh:" fname) (with-temp-buffer (insert fname) (search-backward ":") (let ((last-match-end nil) (last-ssh-hostname nil)) (while (string-match "@\\\([^:|]+\\\)" fname last-match-end) (setq last-ssh-hostname (or (match-string 1 fname) last-ssh-hostname)) (setq last-match-end (match-end 0))) (insert (format "|sudo:%s" (or last-ssh-hostname "localhost")))) (buffer-string))) (t (concat "/sudo:root@localhost:" fname))))))
可以很容易地使用sudo对文件进行进行编辑,但使用ivy时不成功,印象分又-1
helm中也有用的不爽的地方,比如:
- 有个header-line是什么鬼
设置了
helm-display-header-line
为nil
还是有,字体那么大,背景那么丑,显示出来干嘛,虽然后面设置height
为0.1
解决 - 在mode-line显示help信息干嘛
我已經对helm很熟悉了,不需要这些help info,后面设置
spaceline-helm-help-p
为nil
解决 - multi source
我不知道这对谁有用,反正对我没用
- ...
另外,很多人提到的ivy速度要比helm快,这个就仁者见仁,智者见智了,如果说的是启动速度,我的emac配置已经优化为1s内启动,如果是弹出速度,我没有具体对比过,不过就个人而言,helm与ivy弹出速度感觉两者都差不多
总之,helm大而全,ivy小而精,但helm有过多的为用户做出选择,ivy在细节上打磨的不太够,哪个用得爽就选谁吧,反正我用helm!