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

可以编辑呀。

依赖的话,确实会有 :rofl:

效果图是这样的: output

:+1:,厉害。

不过我还是觉得通用性差了些,打开vertico-选择候选-对候选进行操作-回到latest-vertico-session 这是一种操作模式,其中的对候选进行操作可以是很多,不止预览编辑文件等。

其实用 vertico-repeat 就可以做到,只是有点瑕疵。话说 doom emacs 的界面和字体看着真舒服。

今年最大的改进是啥都completing-read包了一下,很舒服 :smiley:

1 个赞

细说 embark-preview,非常需要 preview

比如有个宏作为部分代码的开关,散落在十多个文件里 我还知道有一种是用+ivy/woccur

这种我一般是 ivy/woccur 的等价函数 C-c C-e (embark-export) 把所有结果都导出来。然后把这个导出结果 buffer 关掉。然后使用 ]q [q (next-error, previous-error) 来在不同的结果之间切换。注意到 ]q 按下来之后会把这个导出内容的 buffer 重新打开。这个时候把 ]q 绑定成一个函数简单的包一下 next-error 函数把这个导出的 buffer 窗口关掉即可。

就是我引用的那一段代码呀,不过需要安装 embark。

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

我也是第一次知道 vertico-suspend 这个函数。刚才试了一下,如果使用 consult-ripgrep 的话那么调用 vertico-suspend 会直接退出 minibuffer 并且跳转到你正在预览的文件,之后再按下 vertico-suspend 会重新恢复你之前浏览的 minibuffer 的位置,和你描述的想要行为应该是一致的。只是应该必须是支持预览的 minibuffer 命令 (比如 consult 的命令)才有这个特性

哈哈,我开发啥包都用 complete-read

又学会一招,感谢感谢!!

看了下其它坛友和您的讨论,试了下vertico-suspend用的还okay,基本可以实现。这个技巧真不错哇

印象比较深的是 dogear 这个包。

1 个赞
  1. 移除 expand-region.el, 因为在org大文件使用非常卡, 基本不可用, 现在使用 expreg.el 替代, 小巧快速但依赖treesit.el(没有也可以使用)
  2. 移除 cape.el 补全, 很多补全都没用过, 唯一使用的就是的就是org中的src的emacs-lisp补全, 其实直接添加: (add-to-list 'completion-at-point-functions #'elisp-completion-at-point) 就可以补全了
  3. 移除 bookmark-in-project.el 基本没有过 bookmark 这个功能
  4. 移除 breadcrumb.el (面包屑), 忘记了有个bug, 直接导致打开某种文件类型无法正常打开
  5. 移除 vundo.el, 用处不大, 直接 C-x u 加 undo-fu 就够用了
  6. 移除 perfect-margin.el 居中窗口, 移除是因为有时切换至 minibuffer 时, 窗口大小随机变换, 移除后居然我也能适应不居中观看
  7. 移除 elfeed, 改用 follow 软件了
  8. 移除 org-journal, 自定义一个 org-capture tempel 就够用了
  9. 添加了自己做的 dict-line.el 自动离线查英语单词, 嘎嘎爽
  10. 添加了 treesit-fold 代码折叠
4 个赞

这是我日常浏览代码过程里最常用的动作了,刚好你问到我就详细描述一下,不知道其他道友是否有更好的推荐,歪楼了😆

1 个赞

从 lsp-mode 换到了 eglot,没了~~

把 copilot.lua 和 codeium.nvim 删掉了,换成了自己写的插件直接用 curl 调用 llm 的 API 负责代码补全,以及 aider.chat 配合 vterm (不用 comint 主要是为了 vterm 的高亮)用作 chat 助手和 ai 帮忙写代码的工具。

闪退可以详细说一下吗? 哈哈哈哈

@manateelazycat 懒猫大大,关于这个问题我已经好好查了下,原来就是开了matlab-language-server的锅;同样的它也会让eglot卡死、让ivy对completion-at-point的托管变的奇奇怪怪。

所以不是您的lsp-bridge的问题哈,纯纯这个ls开发真心是充满了matlab“特色”。我已经放弃这个ls了,用了大半年,matlab-ls基本没啥帮助,跳转、补全多个文件中的变量,都没有基于tags的citre优秀,各种不工作;至于补全matlab库函数基本没啥意义。

这个问题完结撒花~

2 个赞
(after! vertico
  ;; vertico-repeat
  (map! :map vertico-map
        "C-," #'vertico-repeat-previous
        "C-." #'vertico-repeat-next)
  ;; vertico-suspend
  (map! :g "C-'" #'vertico-suspend)

  ;; For Embark user: avoid adding redundant repeat history after `embark-act'.
  (defun vertico-repeat--filter-explicit (session)
    (and (cadr session) (eq this-command real-this-command) session))

  ;; 1. Remove `vertico-repeat--filter-empty' (one could even repeat empty input vertico session).
  ;; 2. Remove `execute-extended-command' (one could even repeat `M-x' vertico session).
  (setq vertico-repeat-transformers '(vertico-repeat--filter-commands vertico-repeat--filter-explicit))
  (setq vertico-repeat-filter '(vertico-repeat vertico-repeat-select))

  ;; To preserve the order of candidate, back up the minibuffer/command history.
  ;; Cause vertico use those history to sort the candidates.
  (defvar minibuffer-history-repeat-backup minibuffer-history)
  (defvar extended-command-history-repeat-backup extended-command-history)
  (add-hook! 'minibuffer-setup-hook
    (setq minibuffer-history-repeat-backup minibuffer-history)
    (setq extended-command-history-repeat-backup extended-command-history)
    (setq face-name-history-backup face-name-history))

  ;; Advice `vertico-repeat' to respect those backed up history,
  ;; so order of candidate is preserved.
  (define-advice vertico-repeat
      (:around (orig &rest arg) history)
    (let ((minibuffer-history minibuffer-history-repeat-backup)
          (extended-command-history extended-command-history-repeat-backup)
          (face-name-history face-name-history-backup)
          (consult-async-split-styles-alist
           (mapcar (lambda (plist) (cons (car plist) (consult--plist-remove '(:initial) (cdr plist))))
                   consult-async-split-styles-alist)))
      (apply orig arg))))

我发现前辈说的有道理,我示范的操作只是一个命令而已(+vertico/embark-preview),而我们希望的是无论执行什么命令,总之在关闭 vertico session 后,万一紧接着又想调回来时,能一模一样(选中候选项,保持顺序)地召唤回来。

我研究了一下,发现 vertico-repeat 的原理,就是:每次退出 minibuffer 时,记录一下执行的命令已键入的内容以及当前选中的候选项

而顺序会变,是因为 vertico 用历史命令来排序,每次使用 vertico 后,刚刚选中的候选项就被压入历史命令了,那么下次再开启 vertico,它自然就在第一个了。

所以可以每次打开 vertico 时,备份一下当前的历史记录,在 vertico-repeat 时,用这个备份的历史记录,那么就不会丢失排位了。

(具体实现过程如上面代码所示)

演示如下(可以暂停来看,右侧为键入的命令记录): output

无论是完成了 vertico session 还是中间 abort 了,都是可以恢复的。

但是这些 vertico session 的招出都是即时的(候选项几乎是瞬间出来),但有些 vertico session 是异步的(比如 consult-ripgrep),这些往往是 vertico session 已经出来了,但是候选项需要等一会才有。

这个时候就有点小问题,因为 vertico-repeat 只能恢复该 session 的命令和已经键入的内容,但是无法自动选中当时的候选项(因为候选区还是空白的,当然无法选中了!)。所以我取了个巧,就是对于这种异步的 vertico session,可以在候选区出现后,再多按一次 vertico-repeat-previous (见代码的键绑定),这样就有可以恢复选中曾经的候选项了,效果见下: output

10 个赞

好厉害,这个看起来简直就和我想要的ivy-resume一模一样!晚点抄过去试试效果😄

哈哈哈, got it, 感谢反馈。 :wink:

超赞的,觉得可以专门另外一贴

M-x consult-buffer 就包括了 buffer 和 recentf 吧,见 consult-buffer-sources