逃离 IntelliJ:Emacs Eglot 实现 Scala 与 Kotlin 开发
Escape IntelliJ: Scala and Kotlin LSPs on Emacs Eglot
长期以来,JVM 语言开发者被灌输必须使用 IntelliJ IDEA 的观念,但这套臃肿的封闭生态往往占用大量内存且难以定制。我通过 Emacs 29 内置的 Eglot 客户端,结合 Scala 的 Metals 和 Kotlin 的 IntelliJ 语言服务器,构建了一套轻量级、高性能的开发环境。文章详细展示了如何通过 Emacs Lisp 自定义配置,解决 LSP 协议中的怪异行为,例如修复 Kotlin 自动补全的空文本 Bug 以及优化 Metals 的语义刷新闪烁问题。这不仅打破了“标准文本编辑器无法处理复杂 JVM 语言”的迷思,更让你重获对开发工具的完全控制权,体验真正无缝的编码流程。
Emacs 通过三项核心优势彻底颠覆了这一范式:LSP 的 Unix 哲学、无限的 Hack 能力以及统一的界面体验。
HN 评论区
120- sajithdilshan
但这只是夸张之词。我每天都在 Mac 上使用 IntelliJ IDEA,同时打开多个项目,说实话,他们优化了很多东西让 IDE 更快了。我不是说它完美无缺,但它正在变得更好。而且它也不是闭源的。IDE 的核心是开源的(https://github.com/jetbrains/intellij-community),某些特定框架的支持(例如 Spring)则包含在 Ultimate 版本中。
- laszlojamf
我同意 IntelliJ 是个资源吞噬怪兽,但我还没找到哪个编辑器的代码导航功能能跟它媲美。基本上这就是我如今使用它的全部原因,在 LLM 时代,我依然觉得这很值得。VSCode,尤其是针对 Golang,简直糟糕透顶。可能是我用法不对,但我真的试过,就是不够好。
在 LLM 出现之前,当我还手动重构代码时,那些用 vim 或 vscode 的同事总让我来做大型重构,因为 IntelliJ 总是能搞定,而用其他编辑器则是看运气。
- DrProtic
人们会绞尽脑汁去避免为一款 arguably 出色的产品付费,而这产品还来自一家很棒的公司,转头却毫不犹豫地花同样的钱在 Starbucks 买咖啡。
我想我从未见过哪家公司像 JetBrains 这样被如此 scrutinized 和 nitpicked。
- marginalia_nu
我们至今没有一个像样的 Java 语言服务器,这是我判断 LLM 总体上还无法真正交付(ship)的 Canary。对此类工具的需求毋庸置疑,但没人来填补这个空白。(jdtls 值得称赞它尝试了,但就是不够好)
- phmx
Metals 的文档包含了将其与 Emacs 集成的说明。我照着做了,一切都能正常工作,包括 worksheets。
- microflash
作为一个 IntelliJ 及其系列 IDE 的重度用户,我得说它们比几年前臃肿太多了。我最近对 IDEA 最大的烦恼是磁盘同步极慢。如果我在 IDE 外部修改了文件,它在 IDE 里显示出来需要很久。
他们应该削减二进制文件大小,发布一个不带所有捆绑插件的精简版本。他们应该改进在超大项目上的性能(包括内存和 IO)。
虽然我个人的 Ultimate 订阅已经过期了,但我工作中依然在使用它,因为它的 debugger、codenav 和 autocompletion 依然是业界最佳。
- tecleandor
我正试图避开 IntelliJ,因为我只需要用它来编辑 TeamCity 构建配置文件,这些文件是用基于 Kotlin 的 DSL [0] 编写的,而 autocomplete 和 linting 会非常有帮助。
我试过 Eclipse 和 VS Code,但无法让它们正确进行自动补全或检测语法。有什么 LSP 能帮我解决这个问题吗?因为我对 Java、Kotlin 或 Gradle 一无所知,一切都让我很困惑……
--
- minraws
我最近写了一个 Kotlin 和 Java 的 LSP,IntelliJ 中所有 LSP 相关的东西与 IDE 本身耦合得如此紧密,这真让人恼火。他们有一个外部的 LSP 项目,但进展非常缓慢甚至停滞不前,这很令人沮丧。
注:我尝试过用 IntelliJ 构建它,性能远不如我预期的那么好,虽然比很多 LSP 要好,但依然如此。
我知道很多人尝试过,但我认为只有 JetBrains 能做出一个好的 LSP,除非有人真的全力以赴,花几个月时间,在 JetBrains 工具链和生态系统之外重新构建解析和类型系统。
Java 可能更容易,但现有解决方案的工作方式也相当 jank。
但我喜欢这类项目,我并不反对 IntelliJ,它曾经很棒,在我学习时确实很棒。但我想要一个 LSP 来写脚本和做小修改,打开一个巨大的 IDE 对于我现在喜欢做的那些小改动来说,实在是大材小用。