把 LemMinX 和 lemminx-maven 放在同一个 classpath 下启动的 Neovim 插件,给 pom.xml 提供依赖、插件、属性的补全、悬停和诊断,同时保留普通 XML 的功能。
需要 Neovim 0.11+(vim.lsp.config)和 JDK 17+。
不用 VSCode 的话,直接执行:
:LemminxMavenInstall这个命令会从 Eclipse 官方 Maven 仓库(repo.eclipse.org)下载最新版的 org.eclipse.lemminx-*-uber.jar 和 lemminx-maven-*-zip-with-dependencies.zip,解压到 stdpath("data")/lemminx-maven/。下载在后台进行,完成后会自动重启已经打开的 XML buffer 上的服务。需要 curl,以及 unzip 或 tar 其中之一。
也可以指定版本::LemminxMavenInstall 0.31.2 0.12.0(LemMinX 版本、lemminx-maven 版本)。
配置 auto_install = true 后,第一次打开 XML 文件时如果找不到 jar 就会自动下载。
如果想自己管理 jar,插件按下面的顺序查找:
| 用途 | 配置项 | 环境变量 | 兜底 |
|---|---|---|---|
| LemMinX jar | lemminx_jar / lemminx_home |
$LEMMINX_HOME |
:LemminxMavenInstall 目录 → ~/.vscode/extensions/redhat.vscode-xml-*/server |
| lemminx-maven 及其依赖 | maven_jars / maven_home |
$LEMMINX_MAVEN_HOME |
lemminx_home → :LemminxMavenInstall 目录 |
所有 jar 都放在 $LEMMINX_HOME 一个目录里也可以:插件会优先选 *uber.jar 作为 LemMinX,其余 jar 都当作扩展(其中的 org.eclipse.lemminx-*.jar 会被排除)。classpath 上 LemMinX 排在第一位。
lazy.nvim:
{
"JavaHello/lemminx-maven.nvim",
ft = { "xml", "xsd", "xsl", "xslt", "svg" },
cmd = "LemminxMavenInstall",
opts = {},
}所有配置项和默认值:
require("lemminx_maven").setup({
java_cmd = nil, -- 默认用 $JAVA_HOME/bin/java,否则用 java
lemminx_jar = nil, -- LemMinX jar 的路径
lemminx_home = nil, -- 默认 $LEMMINX_HOME
maven_home = nil, -- 默认 $LEMMINX_MAVEN_HOME,否则用 lemminx_home
maven_jars = nil, -- 直接指定 lemminx-maven 的 jar 列表,不再自动查找
extension_jars = nil, -- 其它 LemMinX 扩展 jar
jvm_args = nil, -- 例如 { "-Xmx1G" }
settings = {}, -- LemMinX 的 settings,发送时放在 `xml` 下
auto_install = false, -- 找不到 jar 时自动执行 :LemminxMavenInstall
server = {}, -- 合并到 vim.lsp.config("lemminx-maven") 里,优先级最高
auto_enable = true, -- setup 时自动调用 vim.lsp.enable("lemminx-maven")
})LSP 客户端的名字是 lemminx-maven,不会和 nvim-lspconfig 里的 lemminx 冲突。不过不要两个都启用,否则会同时跑两个 XML 服务。
on_attach、capabilities 之类的字段可以通过 server 传入,也可以写在 after/lsp/lemminx-maven.lua 里。
:checkhealth lemminx_maven