TIL:提高 emacs 阅读代码的体验

需求:

  1. 高亮多个相同的函数和变量
  2. 找到同一变量/函数名在同一份文件里的位置
  3. 找到同一变量/函数名在不同文件里的位置
  4. 给代码做笔记, 重复回顾时, 可以得到对应的提示
  5. 遇到不了解的变量/函数, 可以像 VSCode 的 MDN 插件那样直接提供解释
  6. 格式化代码
  7. 快速复制光标所在的单词,句子…

解决办法:

需求 1 和 2 可以通过 symbol-overlay 这个优秀的插件解决,在同一份文件里,它可以让我们高亮任意当前选中的变量/函数名,如果高亮多个变量, 它会自动安排颜色,整体体验舒服。同时它还提供了高亮变量之间相互跳转,甚至批量修改的功能,简约而强大。

需求 3 有很多插件可以解决,我用 Doom Emacs 和 helm,它自带了 helm-rg 这个插件,而且分配好了快捷键,可以很方便的查找同一个目录下,多个文件里,同一个变量/函数名。如下图所示:

关于这个需求,有很多方案可以解决,比如懒猫大的 color-rg 等。只不过,目前 Doom Emacs 的已经满足需求,就不另外折腾了。

需求 4 和 5 暂时不急需。

需求 6 可以用一个叫 format-all 的插件解决。

需求 7 是非常急需的,如果配置好了,可以解决很多重复按键操作,这里推荐使用懒猫大的 thing-edit 已经提供了非常完善的功能,可以按照自己的需求,将对的功能绑定在快捷键上。

我个人目前用 hydra 的菜单,来满足自己随时调用的需求。

6 个赞

其实 1 2 3 5 6 都可以靠 LSP……4 不谈,7 我习惯用 embark

分享一个可能常被忽视的内置功能, 算是一个简易版 symbol-overlay. Emacs 中有个叫 Interactive Highlighting 的功能:

  • M-s h . (highlight-symbol-at-point) 也可以高亮当前 buffer 中当前位置的 symbol, 多个 symbol 也会自动分配不同的颜色, 如果有 universal arg 的话, 还可以自己选颜色.
  • M-s h u (unhilight-regexp) 则可以取消高亮当前 symbol. 如果有前缀的话, 会取消高亮所有 symbol.

相关的还有一系列, 比如高亮当前行, sexp, regexp, 等… 具体可见 Manual: Highlight Interactively (GNU Emacs Manual).

8 个赞

Annotate 注释–不会破坏代码

3 个赞

发现第 5 个需求可以通过 corfu 和 cape 来解决,前者提供一个小的 preview 窗口,针对一个内置函数,内置命令,显示解释。

简单试了一下,它会在多次标记时自动分配不同的颜色,如果只是查看一下,而无须更多其他操作,其实也还蛮适合的。

发现了高亮代码的另外一个方法:

原因是我装了 embark,如果只是简单的高亮代码,快速看到函数名,变量名的位置,可以直接用 embark-toggle-hightlight 这个命令。

效果如图:

是一个比较快的,临时的解决方案。