想问一下lsp-mode(gopls)和go-mode很多功能是不是有重叠呀

比如跳转到某个函数定义之类的? 感觉这两个mode关系不是很清楚。。

go-mode有跳转到函数定义的功能?功能可能是有重叠,但lsp-mode的跳转到函数定义功能应该比其它工具如ctag,dumbjump 等更精确一些

我问题描述不准确,主要是对gopls,lsp-mode定位太模糊了

简单说,gopls是服务端后端,lsp-mode是运行在emacs中的客户端,gopls不仅可用于lsp-mode这一个客户端,还可用于其它编辑器。不知道这么说清楚不

这个我理解,那既然lsp-mode可以用于不同语言例如c++,go等,那就定义跳转这个功能而言,是lsp-mode定义了一致的快捷键command,然后具体实现由语言后端完成吗?

比如我要跳转到c++中的func,或者go中的func,是lsp-mode保证我在emacs中输入的command一致的吗

不太清楚lsp是如何实现的,我理解lsp-mode就只是前端,把数据发到后端,解析后端返回数据,功能具体实现全是后端完成的

我想了想,我的核心问题是,不同编程语言下,跳转等命令绑定的快捷键是由lsp-mode定义的对吗

在 lsp 出来之前,不同的编程语言都需要做跳转功能,go-mode 要做跳转,python-mode 也要做跳转。

lsp 出来后,lsp mode 可以给所有它支持的语言提供跳转功能, go-mode 和 python-mode 都不需要做跳转了

所以 go-mode 有跳转功能是因为他在 lsp-mode 出来之前就有了,那时候只有 它 能提供跳转功能

是的,可以看看 lsp-command-map

https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-mode.el#L2406

lsp-mode 的介绍文章 https://phenix3443.github.io/notebook/emacs/modes/lsp-mode.html