结合opencode+oh-my-opencode配置LSP Server
OpenCode LSP 自动配置指南
⚠️ Agent 执行规范:本文档面向 AI Agent。Agent 收到用户"执行配置"指令后,必须立即开始执行,不得询问用户。所有步骤均可自动化完成。
访问 GitHub/Eclipse 可能涉及网络配置,请提前为终端配置好相关设置。
概述
LSP (Language Server Protocol) 为 OpenCode 提供代码补全、类型检查、重构等能力。本文涵盖 4 种常用语言的 LSP 配置:
| 语言 | LSP Server | 安装方式 | 包管理器 |
|---|---|---|---|
| TypeScript | typescript-language-server | npm 全局安装 | npm |
| Python | pyright | npm 全局安装 | npm |
| YAML | yaml-language-server | npm 全局安装 | npm |
| Java | jdtls | 自动下载解压 | - |
Agent 执行流程
Step 1: 环境检查(并行)
同时执行以下检查:
# 检查 npm 环境
npm --version && node --version
# 检查 jdtls 是否已安装
where jdtls 2>nul || echo NOT_FOUND # Windows
which jdtls 2>/dev/null || echo NOT_FOUND # macOS/Linux
# 检查配置文件是否存在
# 读取: ~/.config/opencode/oh-my-opencode.json
Step 2: 安装 npm LSP 包
npm install -g typescript-language-server pyright yaml-language-server
验证安装:
typescript-language-server --version # 期望输出版本号
pyright --version # 期望输出版本号
yaml-language-server --version # 期望输出版本号
Step 3: 安装 Java LSP (jdtls) - 自动化
⚠️ jdtls 必须自动下载安装,不得要求用户手动操作。
3.1 下载 jdtls
下载地址(选择最新稳定版):
https://download.eclipse.org/jdtls/milestones/1.57.0/jdt-language-server-1.57.0-202602261110.tar.gz
3.2 Windows 自动安装脚本
# 定义安装目录
$installDir = "$env:USERPROFILE\.local\share\opencode\bin"
$tempFile = "$installDir\jdtls.tar.gz"
# 1. 创建目录
New-Item -ItemType Directory -Force -Path $installDir | Out-Null
# 2. 下载压缩包
Invoke-WebRequest -Uri "https://download.eclipse.org/jdtls/milestones/1.57.0/jdt-language-server-1.57.0-202602261110.tar.gz" -OutFile $tempFile
# 3. 解压(使用 tar,Windows 10+ 内置)
Set-Location $installDir
tar -xzf jdtls.tar.gz
# 4. ⚠️ 关键:jdtls 解压后 bin 目录嵌套,实际可执行文件在 bin/bin/
# 目录结构:
# $installDir/
# ├── bin/
# │ ├── jdtls <- 启动脚本(Linux/macOS)
# │ ├── jdtls.bat <- 启动脚本(Windows)
# │ ├── jdtls.py <- Python 启动器
# │ └── ...其他文件
# ├── plugins/
# └── config_win/
# 5. 添加正确的 bin 目录到 PATH(注意是 bin/bin/)
$jdtlsBinDir = "$installDir\bin"
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$jdtlsBinDir", "User")
# 6. 清理压缩包
Remove-Item $tempFile -Force
# 7. 验证安装(jdtls 不支持 --version,检查是否可执行即可)
& "$jdtlsBinDir\jdtls.bat" 2>&1 | Select-Object -First 3
# 期望:Python 报错(缺少参数),证明命令可用
3.3 macOS/Linux 自动安装脚本
#!/bin/bash
INSTALL_DIR="$HOME/.local/share/opencode/bin"
TEMP_FILE="$INSTALL_DIR/jdtls.tar.gz"
# 1. 创建目录
mkdir -p "$INSTALL_DIR"
# 2. 下载
curl -L -o "$TEMP_FILE" "https://download.eclipse.org/jdtls/milestones/1.57.0/jdt-language-server-1.57.0-202602261110.tar.gz"
# 3. 解压
cd "$INSTALL_DIR"
tar -xzf jdtls.tar.gz
# 4. 添加到 PATH(注意是 bin/bin/)
echo 'export PATH="$HOME/.local/share/opencode/bin/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null
# 5. 清理
rm "$TEMP_FILE"
# 6. 验证
"$INSTALL_DIR/bin/jdtls" --help 2>&1 | head -3
3.4 jdtls 目录结构说明
⚠️ 这是安装过程中最容易出错的地方!
解压后的目录结构:
$installDir/ # 例如 C:\Users\xxx\.local\share\opencode\bin\
├── bin/ # 第一层 bin
│ ├── jdtls # Unix 启动脚本
│ ├── jdtls.bat # Windows 启动脚本 ⬅️ 这是需要添加到 PATH 的
│ ├── jdtls.py # Python 启动器
│ └── ...配置目录
├── plugins/ # JAR 文件
├── features/
├── config_win/ # Windows 配置
├── config_mac/ # macOS 配置
└── config_linux/ # Linux 配置
PATH 应该指向: $installDir/bin/(即包含 jdtls.bat/jdtls 的目录)
常见错误:
- ❌ PATH 指向
$installDir/(根目录) - ✅ PATH 指向
$installDir/bin/(正确的 bin 目录)
Step 4: 写入配置文件
目标文件: ~/.config/opencode/oh-my-opencode.json
将以下内容合并到配置文件(添加 lsp 字段):
{
"lsp": {
"typescript-language-server": {
"command": ["typescript-language-server", "--stdio"],
"extensions": [".ts", ".tsx"],
"priority": 10,
"env": { "NODE_OPTIONS": "--max-old-space-size=4096" },
"initialization": {
"preferences": { "includeInlayParameterNameHints": "all" }
}
},
"pyright": {
"command": ["pyright-langserver", "--stdio"],
"extensions": [".py", ".pyi"],
"priority": 10,
"env": { "NODE_OPTIONS": "--max-old-space-size=4096" },
"initialization": {
"preferences": {
"python": {
"analysis": {
"typeCheckingMode": "basic",
"autoSearchPaths": true,
"useLibraryCodeForTypes": true
}
}
}
}
},
"yaml-language-server": {
"command": ["yaml-language-server", "--stdio"],
"extensions": [".yaml", ".yml"],
"priority": 10,
"initialization": {
"yaml": {
"format": { "enable": true },
"validate": true,
"hover": true,
"completion": true
}
}
},
"jdtls": {
"command": ["jdtls", "--stdio"],
"extensions": [".java"],
"priority": 10,
"env": { "NODE_OPTIONS": "--max-old-space-size=4096" },
"initialization": {
"preferences": { "includeInlayParameterNameHints": "all" }
}
}
}
}
验证 JSON 语法:
python -c "import json; json.load(open(r'~/.config/opencode/oh-my-opencode.json')); print('JSON OK')"
Step 5: 最终验证
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| TypeScript LSP | typescript-language-server --version |
输出版本号 |
| Python LSP | pyright --version |
输出版本号 |
| YAML LSP | yaml-language-server --version |
输出版本号 |
| Java LSP | where jdtls / which jdtls |
输出路径 |
| 配置文件 | JSON 语法检查 | OK |
完整执行清单(Agent Checklist)
执行配置时,Agent 应按顺序完成:
故障排除
| 问题 | 原因 | 解决方案 |
|---|---|---|
command not found: typescript-language-server |
npm 全局目录不在 PATH | 检查 npm config get prefix,确保其 bin 子目录在 PATH |
command not found: pyright-langserver |
npm 全局目录不在 PATH | 同上 |
jdtls 找不到 |
PATH 指向错误目录 | PATH 应指向 $installDir/bin/(包含 jdtls.bat 的目录) |
| jdtls 报 Python 错误 | 正常,jdtls 无参数会报错 | 不影响使用,LSP 配置正确即可 |
| LSP 不生效 | 配置未重载 | 重启 OpenCode |
| JSON 语法错误 | 配置文件格式问题 | 使用 python -c "import json;..." 验证 |
| Java 项目无法识别 | 缺少构建文件 | 确保项目根目录有 pom.xml 或 build.gradle |
| 下载失败 | 网络问题 | 配置网络环境或使用镜像 |
注意事项
-
不要询问用户:本文档所有步骤均可自动化,Agent 应直接执行
-
npm 全局路径:确保 npm 全局目录在 PATH 中
- 检查:
npm config get prefix - 该路径下的
bin或目录应包含在 PATH
- 检查:
-
jdtls 目录结构:解压后 bin 嵌套,PATH 需指向包含
jdtls/jdtls.bat的目录 -
配置文件格式:
oh-my-opencode.json是标准 JSON,不支持注释 -
优先级:用户配置 > 项目配置
-
清理:安装完成后删除下载的压缩包,节省空间

浙公网安备 33010602011771号