可以编辑呀。
依赖的话,确实会有
效果图是这样的:
可以编辑呀。
依赖的话,确实会有
效果图是这样的:
,厉害。
不过我还是觉得通用性差了些,打开vertico-选择候选-对候选进行操作-回到latest-vertico-session
这是一种操作模式,其中的对候选进行操作可以是很多,不止预览编辑文件等。
其实用 vertico-repeat 就可以做到,只是有点瑕疵。话说 doom emacs 的界面和字体看着真舒服。
今年最大的改进是啥都completing-read包了一下,很舒服
细说 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 这个包。
这是我日常浏览代码过程里最常用的动作了,刚好你问到我就详细描述一下,不知道其他道友是否有更好的推荐,歪楼了😆
从 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库函数基本没啥意义。
这个问题完结撒花~
(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
时,用这个备份的历史记录,那么就不会丢失排位了。
(具体实现过程如上面代码所示)
演示如下(可以暂停来看,右侧为键入的命令记录):
无论是完成了 vertico session 还是中间 abort 了,都是可以恢复的。
但是这些 vertico session 的招出都是即时的(候选项几乎是瞬间出来),但有些 vertico session 是异步的(比如 consult-ripgrep
),这些往往是 vertico session 已经出来了,但是候选项需要等一会才有。
这个时候就有点小问题,因为 vertico-repeat
只能恢复该 session 的命令和已经键入的内容,但是无法自动选中当时的候选项(因为候选区还是空白的,当然无法选中了!)。所以我取了个巧,就是对于这种异步的 vertico session,可以在候选区出现后,再多按一次 vertico-repeat-previous
(见代码的键绑定),这样就有可以恢复选中曾经的候选项了,效果见下:
好厉害,这个看起来简直就和我想要的ivy-resume一模一样!晚点抄过去试试效果😄
哈哈哈, got it, 感谢反馈。
超赞的,觉得可以专门另外一贴
M-x consult-buffer
就包括了 buffer 和 recentf 吧,见 consult-buffer-sources