(闲聊)2024 年,大家删了什么包?加了什么包?哪些包让你印象深刻?

我也是,配置一年没动了,一年前想要做的事,现在无丝毫进展,感觉挺失败的

1 个赞

这有什么失败的,用 emacs 就好比打游戏,是为了自己方便开心,不是给自己压力,想做的事一直拖着不做,说明这个事情做不做都行。

4 个赞

尝试了vertico,但是没有ivy用得顺手,又继续用ivy了。

同ivy, 我离不开ivy-resume,它可以让我再次打开上次搜索的结果,并且保持上次选择的行位置,vertico 没见到有这种功能

几乎没用过,这个是重复上一次的ivy动作,对吧?它有什么便捷实践场景可以分享下么,谢谢哇,学习下

我一直用ivy应该有个7、8年以上了,最近才试用下vertico尝个鲜,其实我暂时也不知道究竟哪里是替代必要性,纯试试

我把vertico完全按ivy之前按键设了一遍,其实不少功能缺失;因为复刻了ivy的按键行为,倒不存在不适情况,就当ivy在用。

vertico没有我常用的counsel-buffer-or-recentf,速度上也没什么区别。

我使用场景多数是C语言工程,比如有个宏作为部分代码的开关,散落在十多个文件里,我ivy搜索一下,然后出来十多个结果,我选第4个按回车(我通过文件名觉得这个结果可能是我感兴趣的),进去看看宏框住了哪些代码,发现并不是我想要的地方,按ivy-resume,这时候还原出来的搜索结果里我的选中项还是第4个,我按Ctrl n往后继续看看哪个可能是我感兴趣的地方,按回车打开。 如果是vertico,也有类似resume的命令,但是还原的搜索结果选中项又从第一个开始了,还有可能搜索结果的顺序也变了。

2 个赞

感觉很有用。vertico 下对应的是 vertico-suspend 这个命令吗?

1 个赞

应该是vertico-repeat,我很久没尝试vertico 了,不知道现在它的行为是怎样的,我上面描述的行为是ivy的,我感觉这是我日常用得非常多的动作,不知道大家对类似我这种情况是用什么操作代替的。

我还知道有一种是用+ivy/woccur,可以把搜索结果放到一个buffer里,然后可以逐个按回车来打开查看,但是这个结果窗口是一直占用着屏幕的,我看代码的区域就少了,总有点不爽,一般我就不想用它了。当然它在批量替换的时候很有用。

好像这两个都可以,我之前一直不知道这个怎么用,直到看到你上面的回答,哈哈。

1 个赞

原来还有 vertico-suspend 这个命令呀!我之前一直用的 vertico-repeat,后者只能唤起相同的vertico 搜索和已经输入的内容,但是顺序可能会变化,而 vertico-suspend 确实能够完全恢复,包括输入的内容和顺序。

我昨天开始试了下 vertico-suspend,但没用对,我按 M-x vertico-suspend 后出现这个:

vertico-suspend: No Vertico session to suspend or resume

是不是要特殊配置下,你是怎么配置和使用的?

后面我用的 vertico-repeat,文档中关于它怎么配置说的清楚点,确实很方便。

这个提示,是因为你还没有先用一次 vertico-suspend 来挂起当前激活的 vertico session 呢。

你需要先激活一个 vertico session (就是用 vertico 搜一些东西),然后调用 vertico-suspend,那么当前 vertico session 就消失了,之后你就可以再用 vertico-suspend 把刚才的恢复出来。

我是绑定了一个快捷键(Doom):

(map! :g "C-'" #'vertico-suspend)
;; 或者这两个,一样的效果
(general-define-key "C-'" #'vertico-suspend)
(global-set-key (kbd "C-'") #'vertico-suspend)

这个按键 C-' 在我这里没占用,而且在普通 buffer 和 vertico session 的 minibuffer 都能访问这个快捷键,所以就可以无脑按 C-' 来切换已经开启的 vertico session 了。

我知道这个。

那这样就没法完成这个操作了哦。 我昨天知道你说的那样使用,但感觉那样用好像没啥必要。不知道是不是我理解错了?

我有点想要的是能直接恢复上次 vertico session 最后的状态。 是不是 vertico-suspend 也像 vertico-repeat 那样加一个 hook 就好了:

:hook (minibuffer-setup . vertico-repeat-save)

你是说哪个没必要?

话说看上面 @Deeson 描述的vertico-suspend有ivy-resume那样的效果的话,我也想再试试vertico了

退出 vertico session 时要自己手动按 vertico-suspend 保存当前session。我觉得这种用法的优点是中间可以跨很多其他的 vertico session。

缺点是,我按 C-x C-f 打开文件,我这时按 vertico-suspend 就会退出vertico,无法像你说的那样 按 Enter 打开文件,然后在按 vertico-suspend 回到按 Enter 前的那个状态。

我自己觉得后一种场景是我会用得比较多的。

如果你说的是:vertico 导航到某一个候选项的那个文件

那么我是直接在 vertico 里面用 +vertico/embark-preview

(defun +vertico/embark-preview ()
  "Previews candidate in vertico buffer, unless it's a consult command"
  (interactive)
  (unless (bound-and-true-p consult--preview-function)
    (if (fboundp 'embark-dwim)
        (save-selected-window
          (let (embark-quit-after-action)
            (embark-dwim)))
      (user-error "Embark not installed, aborting..."))))

这个是 Doom 里面定义的函数。

这样就不关闭当前 vertico session,并定位到这个候选项的相应位置,如果是我想要的位置,再用 vertico-suspend 挂起当前的 vertico session(如果我之后还想再回到这个 vertico session 定位其他文件的话)

1 个赞

这样只能预览,无法编辑后再在回到之前的 vertico-session 哦。而且还有额外的依赖,稍微有些麻烦。我还是想使用简单的方案。

vertico-repeat 对我可能就可以,只是有你们上面说的重新排序的问题。他与 vertico-suspend 可以结合使用。