结合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.xmlbuild.gradle
下载失败 网络问题 配置网络环境或使用镜像

注意事项

  1. 不要询问用户:本文档所有步骤均可自动化,Agent 应直接执行

  2. npm 全局路径:确保 npm 全局目录在 PATH 中

    • 检查:npm config get prefix
    • 该路径下的 bin 或目录应包含在 PATH
  3. jdtls 目录结构:解压后 bin 嵌套,PATH 需指向包含 jdtls/jdtls.bat 的目录

  4. 配置文件格式oh-my-opencode.json 是标准 JSON,不支持注释

  5. 优先级:用户配置 > 项目配置

  6. 清理:安装完成后删除下载的压缩包,节省空间

posted @ 2026-03-08 21:41  锅总的程序人生  阅读(543)  评论(0)    收藏  举报