大家用 M-: 多吗?为什么没有人给它做一个 ivy/helm 界面?

大家用 M-: 多吗?为什么没有人给它做一个 ivy/helm 界面?

如果按 M-: 就可以输入补全最近运行过的语句,那不是很方便吗?

这个我以前试过,比你想要的更高级一点,然而坑了。

其实我更喜欢开个 Lisp Interactive Mode 然后用 with-current-buffer 和 C-j。理由很明显,有高亮,有补全,想要历史记录也很简单。

1 个赞

感谢推荐,但是有一点不能赞同:

不更新 = 坑?

举个可能不太恰当的例子,我写的 org-edit-latex 虽然不更新了,但是我一直在用,这不能说是“坑”了吧?

with-current-buffer 相比不是更麻烦吗? M-: 本身自带补全

因為感覺這作者跑路了。

比如写了个 project todo list 然後不更新了,就是坑了。如果基本 stable 沒有己知 bug 了的话(bug 當「feature」也行),那就不算。其實完全主觀的。

对我來說最大的問題是在 minibuffer 里编辑不太方便。

是的,看这个作者最近一年在 github 上已经没有活动了,不过只要好用就行,不管那么多了。

M-: 直接作用于当前 buffer,这是它的方便之处,但是不适合大段的编辑。

我有一个艾迪儿,实现一个类似 org-edit-special 的功能。M-: 之后按 C-c ’ 进入一个临时的&全功能的 buffer,编辑完之后再按 C-c ’ 跳回来。

2 个赞

实际上我一直都是这么用的,在别的地方编辑,然后复制粘贴,但是这样就没有历史记录了。我是感觉现在的 M-p 不太好用,有的时候要回退很多次,如果 ivy 在这里能派上用场就好了,比如 M-p不是回退,而是调出一个 ivy buffer,这样会不会更好用呢?

1 个赞

感觉楼上两个人说的都不错,但是不太适合做到一起。

可以单独做一个 @twlz0ne 的临时buffer,和一个 @et2010 的ivy + M-:

首先,临时buffer里C-j运行,自动加入eval-expression历史,代码自动包裹到with-curretn-buffer里。

其次,如果在临时buffer里需要自动补全,可以M-:,用ivy搜索历史,M-o i 插入。

普通的 counsel 命令,用 ivy-reverse-i-search 可以搜索历史,默认 C-r 键. 应该可以给 M-: 写个类似的


下面的配置, 在 M-: 的时候按 C-r 可以用 ivy 选择历史记录

(define-key read-expression-map (kbd "C-r") 'counsel-expression-history)

没有注意到 counsel-expression-history 已经 obsolete 了 , 应该改成:

(define-key read-expression-map (kbd "C-r") 'counsel-minibuffer-history)
3 个赞

这个是正解,能解决楼主的问题。

很赞,很开心,在这个论坛里每天都有收获!

原来 spacemacs 里有一个开箱即用的是 helm-minibuffer-history,也是绑定到 C-r,但不止为什么 ivy layer 没有修改这个绑定到 counsel-expression-history,看来需要提一个 PR

This function is obsolete since 20171011; use ‘counsel-minibuffer-history’ instead.

1 个赞

为什么我的是绑定到 C-c C-l,没改过绑定