Emacs: find-define.el 支持多种编程语言的定义跳转插件


#1

现在IDE都流行多进程架构, 通过外部工具和多进程通讯的方式来扩展插件的能力, 然后把编辑器做的越来越轻.

对于单线程的Emacs来说, Emacs这么多年一直都是玩多进程插件的高手.

今天在等午饭的空隙, 写了一个新的插件 find-define.el , 这个插件的作用就是利用 Emacs 来解析当前的符号, 然后借助编程语言特有的后端工具来实现快速跳转函数或变量定义的目的, 同时在所有编程语言中保持同样的交互手感.

安装方法

  1. 下载 find-define.el 里面的 find-define.el 放到 ~/elisp 目录
  2. 把下面的配置加入到 ~/.emacs 中
(add-to-list 'load-path (expand-file-name "~/elisp"))
(require 'find-define)

使用

  • M-x find-define 跳转到函数或变量定义的地方
  • C-u M-x find-define 在新窗口中查看函数或变量的定义
  • M-x find-define-back 恢复到跳转之前的位置

注意, find-define.el 主要是做多编程语言整合的能力, 跳转定义都是靠外部Elisp插件和工具来完成的, 目前每种编程语言的定义跳转后端工具如下:

编程语言 定义跳转后端
Elisp elisp-def
Python jedi-core
Golang go-mode
JavaScript tide
其他语言 dumb-jump

贡献

没有发现你喜欢的编程语言? 欢迎参考示例代码, 贡献你的补丁


#2

高⋯⋯高产似那啥 :joy:


#3

eglot 通过作为 xref 后端实现了类似的功能,实现了类似的一致体验,只是 lsp 要跑起来稍微有点折腾。

等饭的间隙就撸一个插件,真是神速。


#4

跑题问一下,不知道大神你怎么看待现在的LSP vs 以前emacser常使用的tag系统(ctags, etags, etc)

tag流派虽然结果不够精确可是基本不受语言限制,LSP的话则不同语言就需要不同的language server


#5

tag系统不好用,要折腾配置,项目目录各种细节, 最后还有可能不精确.

lsp原理上就可以做各种事情,只是需要时间成熟.

所以我看好LSP


#6

真是高产!现在不都用xref吗?lsp也是利用的xref。 如果还不行直接上dump-jump