增强Emacs rg.el以支持which-function

增强Emacs rg.el以支持which-function

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

本文讨论了如何在Emacs中修改rg.el,以便在搜索后显示目标内容的函数名称。作者通过编写代码实现了这一功能,包括创建短字符串、执行rg黑客和提示所有行等函数,从而使用户在rg模式下获得更丰富的搜索信息。

🔎

延伸解读

实现原理:利用编译消息与覆盖层

作者通过 rg.el 的 compilation-message 文本属性获取目标行的文件、行号和列号,再调用 which-function 得到函数名,最后用 overlay 在行首插入函数名标签。这依赖于 rg 模式与编译模式的集成,因此仅对 rg 搜索结果中带有编译消息的行有效。

性能优化:限制行数与分批处理

exec/rg-hint-all 函数最多处理 300 行,每 10 行暂停 0.01 秒,避免一次性解析大量行导致 Emacs 卡顿。这种分批策略在结果较多时能保持界面响应,但超过 300 行的部分不会显示函数名,用户需注意此限制。

文件切换与缓冲区管理

exec/lsp-which-function 会缓存上次访问的文件缓冲区,并在切换文件时关闭旧缓冲区,以减少重复打开文件的开销。但若用户同时编辑多个文件,此缓存机制可能意外关闭正在使用的缓冲区,需留意其副作用。

❓

Q&A

如何在Emacs中增强rg.el以显示函数名称?

通过修改rg.el并编写exec/rg-hack和exec/lsp-which-function等函数,可以在搜索结果中显示目标内容的函数名称。

exec/rg-hack函数的作用是什么?

exec/rg-hack函数用于获取目标行的函数名称,并在rg搜索结果中显示该名称。

exec/rg-hint-all函数有什么功能?

exec/rg-hint-all函数用于在rg缓冲区中提示最多300行的函数名称。

如何在不同文件中获取函数名称?

可以使用exec/lsp-which-function函数在不同文件中获取函数名称,并在rg模式下进行提示。

为什么要修改rg.el?

修改rg.el是为了在搜索后提供更丰富的信息,包括目标内容的函数名称,提升用户体验。

如何设置rg模式以支持函数名称提示?

通过在rg模式下添加exec/setup-rg-hint函数,可以设置rg模式以支持函数名称的提示。

🏷️

标签

➡️

继续阅读