印象比较深的是 dogear 这个包。
- 移除 expand-region.el, 因为在org大文件使用非常卡, 基本不可用, 现在使用 expreg.el 替代, 小巧快速但依赖treesit.el(没有也可以使用)
- 移除 cape.el 补全, 很多补全都没用过, 唯一使用的就是的就是org中的src的emacs-lisp补全, 其实直接添加: (add-to-list 'completion-at-point-functions #'elisp-completion-at-point) 就可以补全了
- 移除 bookmark-in-project.el 基本没有过 bookmark 这个功能
- 移除 breadcrumb.el (面包屑), 忘记了有个bug, 直接导致打开某种文件类型无法正常打开
- 移除 vundo.el, 用处不大, 直接 C-x u 加 undo-fu 就够用了
- 移除 perfect-margin.el 居中窗口, 移除是因为有时切换至 minibuffer 时, 窗口大小随机变换, 移除后居然我也能适应不居中观看
- 移除 elfeed, 改用 follow 软件了
- 移除 org-journal, 自定义一个 org-capture tempel 就够用了
- 添加了自己做的 dict-line.el 自动离线查英语单词, 嘎嘎爽
- 添加了 treesit-fold 代码折叠
这是我日常浏览代码过程里最常用的动作了,刚好你问到我就详细描述一下,不知道其他道友是否有更好的推荐,歪楼了😆
从 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
配置启用treesit
完毕,不过感觉现在除了语法高亮,基于treesit的生态还没起来,似乎可以基于它的parsing造很多有用的插件。
暂时它对我的作用只有语法高亮,imenu 现在基于它有点用了。它倒是让我修了半天配置兼容bug,还好我只用C++和Python,施工量不大。
各位大大,treesitter还有什么妙用么
自问自答一波:
- 用treesit实现expand-region可以更可心 (已融入
epxand-region
包,更新到最新版即可)
(注:从站内这个帖子找过去了,github后面有人提供了个新版本)
meow用户表示,GitHub - skissue/meow-tree-sitter: Tree-sitter powered motions for Meow 🐱 这个和meow结合来用是个用法,其实还有其他的包,但我用不上。
关于第二点弃用 tramp 是有类似的方案了吗?还是干脆 ssh 上去执行 emacs 呢。我现在还是本地 GUI tramp 远程,一般开发还行,主要是 magit 特别慢
我是直接ssh过去,用TUI的emacs。画图什么的用vscode. Tramp我用起来还是有点卡顿,可能也是自己没有配置好tramp。
删除了
- emms
- org-noter
- org-roam
想删但没能完成删除的
- pdftools
加了一些自制的包
- orb (org元信息存sqlite,整合了自制的缩水版org-roam, org-noter,支持org-agenda查询用sqlite,只是速度并没有提升 )
- ssp (配合orb使用的播放器,方便记笔记)
新加了ellama这个包,以及自己写的几个包。
删除了一些无关紧要的,但是具体也忘了。
常用的还是习惯了的那些:ivy,company,pyim,orgmode等
删除了 evil,很多其他插件并没针对 evil 的优化
没装几个包,但是重用了自带的 viper 和 follow。
viper 主要用来扩展快捷键,以及自带了个 buffer 专用 keymap。
follow 一页看百多行挺爽的,本来是用来 nov 看小说的,后来发现看代码也爽。
写了个小函数用来自动根据 fill-column 裂窗口,或许绑一下 buffer 快捷键。
(defun zr-follow-current-window (&optional arg)
"Follow the window."
(interactive "P")
(pcase arg
('(4) (delete-other-windows))
((and `(,state . ,keymap)
(guard (memq state '(vi-state insert-state emacs-state))))
(viper-add-local-keys state keymap)))
(let* ((window-width (window-text-width))
(split-cnt (1- (/ window-width fill-column)))
(single-width (/ window-width (1+ split-cnt))))
(dotimes (i split-cnt)
(split-window nil (* (- split-cnt i) single-width) t))
(follow-mode 1)))
(with-eval-after-load 'viper
(bind-keys
:map zr-global-prefix-map
("F" . zr-follow-current-window)))
看起来很不错,后面试试,还是第一次知道这个内置包。