找回密码
 立即注册
首页 业界区 安全 结合opencode+oh-my-opencode配置LSP Server

结合opencode+oh-my-opencode配置LSP Server

全阳霁 4 天前
OpenCode LSP 自动配置指南

⚠️ Agent 执行规范:本文档面向 AI Agent。Agent 收到用户"执行配置"指令后,必须立即开始执行,不得询问用户。所有步骤均可自动化完成。
访问 GitHub/Eclipse 可能涉及网络配置,请提前为终端配置好相关设置。
概述

LSP (Language Server Protocol) 为 OpenCode 提供代码补全、类型检查、重构等能力。本文涵盖 4 种常用语言的 LSP 配置:
语言LSP Server安装方式包管理器TypeScripttypescript-language-servernpm 全局安装npmPythonpyrightnpm 全局安装npmYAMLyaml-language-servernpm 全局安装npmJavajdtls自动下载解压-Agent 执行流程

Step 1: 环境检查(并行)

同时执行以下检查:
  1. # 检查 npm 环境
  2. npm --version && node --version
  3. # 检查 jdtls 是否已安装
  4. where jdtls 2>nul || echo NOT_FOUND   # Windows
  5. which jdtls 2>/dev/null || echo NOT_FOUND  # macOS/Linux
  6. # 检查配置文件是否存在
  7. # 读取: ~/.config/opencode/oh-my-opencode.json
复制代码
Step 2: 安装 npm LSP 包
  1. npm install -g typescript-language-server pyright yaml-language-server
复制代码
验证安装:
  1. typescript-language-server --version  # 期望输出版本号
  2. pyright --version                     # 期望输出版本号
  3. yaml-language-server --version        # 期望输出版本号
复制代码
Step 3: 安装 Java LSP (jdtls) - 自动化

⚠️ jdtls 必须自动下载安装,不得要求用户手动操作。
3.1 下载 jdtls
下载地址(选择最新稳定版):
  1. https://download.eclipse.org/jdtls/milestones/1.57.0/jdt-language-server-1.57.0-202602261110.tar.gz
复制代码
3.2 Windows 自动安装脚本
  1. # 定义安装目录
  2. $installDir = "$env:USERPROFILE\.local\share\opencode\bin"
  3. $tempFile = "$installDir\jdtls.tar.gz"
  4. # 1. 创建目录
  5. New-Item -ItemType Directory -Force -Path $installDir | Out-Null
  6. # 2. 下载压缩包
  7. Invoke-WebRequest -Uri "https://download.eclipse.org/jdtls/milestones/1.57.0/jdt-language-server-1.57.0-202602261110.tar.gz" -OutFile $tempFile
  8. # 3. 解压(使用 tar,Windows 10+ 内置)
  9. Set-Location $installDir
  10. tar -xzf jdtls.tar.gz
  11. # 4. ⚠️ 关键:jdtls 解压后 bin 目录嵌套,实际可执行文件在 bin/bin/
  12. #    目录结构:
  13. #    $installDir/
  14. #    ├── bin/
  15. #    │   ├── jdtls          <- 启动脚本(Linux/macOS)
  16. #    │   ├── jdtls.bat      <- 启动脚本(Windows)
  17. #    │   ├── jdtls.py       <- Python 启动器
  18. #    │   └── ...其他文件
  19. #    ├── plugins/
  20. #    └── config_win/
  21. # 5. 添加正确的 bin 目录到 PATH(注意是 bin/bin/)
  22. $jdtlsBinDir = "$installDir\bin"
  23. [Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$jdtlsBinDir", "User")
  24. # 6. 清理压缩包
  25. Remove-Item $tempFile -Force
  26. # 7. 验证安装(jdtls 不支持 --version,检查是否可执行即可)
  27. & "$jdtlsBinDir\jdtls.bat" 2>&1 | Select-Object -First 3
  28. # 期望:Python 报错(缺少参数),证明命令可用
复制代码
3.4 jdtls 目录结构说明
⚠️ 这是安装过程中最容易出错的地方!
解压后的目录结构:
  1. #!/bin/bash
  2. INSTALL_DIR="$HOME/.local/share/opencode/bin"
  3. TEMP_FILE="$INSTALL_DIR/jdtls.tar.gz"
  4. # 1. 创建目录
  5. mkdir -p "$INSTALL_DIR"
  6. # 2. 下载
  7. curl -L -o "$TEMP_FILE" "https://download.eclipse.org/jdtls/milestones/1.57.0/jdt-language-server-1.57.0-202602261110.tar.gz"
  8. # 3. 解压
  9. cd "$INSTALL_DIR"
  10. tar -xzf jdtls.tar.gz
  11. # 4. 添加到 PATH(注意是 bin/bin/)
  12. echo 'export PATH="$HOME/.local/share/opencode/bin/bin:$PATH"' >> ~/.bashrc
  13. source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null
  14. # 5. 清理
  15. rm "$TEMP_FILE"
  16. # 6. 验证
  17. "$INSTALL_DIR/bin/jdtls" --help 2>&1 | head -3
复制代码
PATH 应该指向: $installDir/bin/(即包含 jdtls.bat/jdtls 的目录)
常见错误:

  • ❌ PATH 指向 $installDir/(根目录)
  • ✅ PATH 指向 $installDir/bin/(正确的 bin 目录)
Step 4: 写入配置文件

目标文件: ~/.config/opencode/oh-my-opencode.json
将以下内容合并到配置文件(添加 lsp 字段):
  1. $installDir/                           # 例如 C:\Users\xxx\.local\share\opencode\bin\
  2. ├── bin/                               # 第一层 bin
  3. │   ├── jdtls                          # Unix 启动脚本
  4. │   ├── jdtls.bat                      # Windows 启动脚本 ⬅️ 这是需要添加到 PATH 的
  5. │   ├── jdtls.py                       # Python 启动器
  6. │   └── ...配置目录
  7. ├── plugins/                           # JAR 文件
  8. ├── features/
  9. ├── config_win/                        # Windows 配置
  10. ├── config_mac/                        # macOS 配置
  11. └── config_linux/                      # Linux 配置
复制代码
验证 JSON 语法:
  1. {
  2.   "lsp": {
  3.     "typescript-language-server": {
  4.       "command": ["typescript-language-server", "--stdio"],
  5.       "extensions": [".ts", ".tsx"],
  6.       "priority": 10,
  7.       "env": { "NODE_OPTIONS": "--max-old-space-size=4096" },
  8.       "initialization": {
  9.         "preferences": { "includeInlayParameterNameHints": "all" }
  10.       }
  11.     },
  12.     "pyright": {
  13.       "command": ["pyright-langserver", "--stdio"],
  14.       "extensions": [".py", ".pyi"],
  15.       "priority": 10,
  16.       "env": { "NODE_OPTIONS": "--max-old-space-size=4096" },
  17.       "initialization": {
  18.         "preferences": {
  19.           "python": {
  20.             "analysis": {
  21.               "typeCheckingMode": "basic",
  22.               "autoSearchPaths": true,
  23.               "useLibraryCodeForTypes": true
  24.             }
  25.           }
  26.         }
  27.       }
  28.     },
  29.     "yaml-language-server": {
  30.       "command": ["yaml-language-server", "--stdio"],
  31.       "extensions": [".yaml", ".yml"],
  32.       "priority": 10,
  33.       "initialization": {
  34.         "yaml": {
  35.           "format": { "enable": true },
  36.           "validate": true,
  37.           "hover": true,
  38.           "completion": true
  39.         }
  40.       }
  41.     },
  42.     "jdtls": {
  43.       "command": ["jdtls", "--stdio"],
  44.       "extensions": [".java"],
  45.       "priority": 10,
  46.       "env": { "NODE_OPTIONS": "--max-old-space-size=4096" },
  47.       "initialization": {
  48.         "preferences": { "includeInlayParameterNameHints": "all" }
  49.       }
  50.     }
  51.   }
  52. }
复制代码
Step 5: 最终验证

检查项命令期望结果TypeScript LSPtypescript-language-server --version输出版本号Python LSPpyright --version输出版本号YAML LSPyaml-language-server --version输出版本号Java LSPwhere jdtls / which jdtls输出路径配置文件JSON 语法检查OK完整执行清单(Agent Checklist)

执行配置时,Agent 应按顺序完成:

  • Step 1: 并行检查 npm 环境、jdtls 状态、配置文件
  • Step 2: 安装 3 个 npm 包并验证
  • Step 3: 下载 jdtls 压缩包
  • Step 3: 解压到 $HOME/.local/share/opencode/bin/
  • Step 3: 将 $HOME/.local/share/opencode/bin/bin/ 添加到 PATH
  • Step 3: 删除下载的压缩包
  • Step 3: 验证 jdtls 可执行
  • Step 4: 编辑 oh-my-opencode.json 添加 lsp 字段
  • Step 4: 验证 JSON 语法
  • Step 5: 输出配置完成摘要
故障排除

问题原因解决方案command not found: typescript-language-servernpm 全局目录不在 PATH检查 npm config get prefix,确保其 bin 子目录在 PATHcommand not found: pyright-langservernpm 全局目录不在 PATH同上jdtls 找不到PATH 指向错误目录PATH 应指向 $installDir/bin/(包含 jdtls.bat 的目录)jdtls 报 Python 错误正常,jdtls 无参数会报错不影响使用,LSP 配置正确即可LSP 不生效配置未重载重启 OpenCodeJSON 语法错误配置文件格式问题使用 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,不支持注释
  • 优先级:用户配置 > 项目配置
  • 清理:安装完成后删除下载的压缩包,节省空间

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册