HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍工作原理内置 LSP 服务器配置 LSP 服务器1、设置环境变量env实例2、设置初始化选项initialization实例禁用 LSP 服务器1、禁用所有 LSP 服务器实例2、禁用特定 LSP 服务器实例添加自定义 LSP 服务器实例实例补充说明PHP Intelephense 许可证禁用自动下载OpenCode 与语言服务器协议LSPLanguage Server Protocol深度集成通过 LSP 服务器为 LLM 提供代码诊断、错误提示等实时反馈帮助 AI 更准确地理解和操作你的代码库。简单来说LSP 服务器就是让 OpenCode 具备读懂代码能力的组件类似于 VS Code 中提供代码补全、错误提示的插件。当文件中出现语法错误或类型不匹配时LSP 服务器会将这些诊断信息反馈给 LLM从而做出更准确的修改。工作原理OpenCode 的 LSP 集成是全自动的无需手动干预。当 OpenCode 打开一个文件时会依次执行以下流程打开文件 │ ▼ 读取文件扩展名如 .ts、.py、.go │ ▼ 与所有已启用的 LSP 服务器进行匹配 │ ├── 匹配成功且服务器已运行 → 直接使用 │ └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器整个过程在后台静默完成LSP 服务器启动后会持续为当前会话提供诊断信息。内置 LSP 服务器OpenCode 内置了主流语言的 LSP 服务器支持当检测到对应文件扩展名且满足相应要求时LSP 服务器会自动启用大部分情况下无需任何配置。LSP 服务器支持的文件扩展名启用要求astro.astro为 Astro 项目自动安装bash.sh,.bash,.zsh,.ksh自动安装 bash-language-serverclangd.c,.cpp,.cc,.cxx,.c,.h,.hpp,.hh,.hxx,.h为 C/C 项目自动安装csharp.cs需要已安装 .NET SDKclojure-lsp.clj,.cljs,.cljc,.edn需要clojure-lsp命令可用dart.dart需要dart命令可用deno.ts,.tsx,.js,.jsx,.mjs需要deno命令可用且项目中存在deno.json或deno.jsonc自动检测elixir-ls.ex,.exs需要elixir命令可用eslint.ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue项目中需要安装eslint依赖fsharp.fs,.fsi,.fsx,.fsscript需要已安装 .NET SDKgleam.gleam需要gleam命令可用gopls.go需要go命令可用hls.hs,.lhs需要haskell-language-server-wrapper命令可用jdtls.java需要已安装 Java SDK版本 21 及以上julials.jl需要安装julia及LanguageServer.jl包kotlin-ls.kt,.kts为 Kotlin 项目自动安装lua-ls.lua为 Lua 项目自动安装nixd.nix需要nixd命令可用ocaml-lsp.ml,.mli需要ocamllsp命令可用oxlint.ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue,.astro,.svelte项目中需要安装oxlint依赖php intelephense.php为 PHP 项目自动安装prisma.prisma需要prisma命令可用pyright.py,.pyi需要已安装pyright依赖ruby-lsp.rb,.rake,.gemspec,.ru需要ruby和gem命令可用rust.rs需要rust-analyzer命令可用sourcekit-lsp.swift,.objc,.objcpp需要已安装 SwiftmacOS 上通过 Xcode 安装svelte.svelte为 Svelte 项目自动安装terraform.tf,.tfvars从 GitHub Releases 自动安装tinymist.typ,.typc从 GitHub Releases 自动安装typescript.ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts项目中需要安装typescript依赖vue.vue为 Vue 项目自动安装yaml-ls.yaml,.yml自动安装 Red Hat yaml-language-serverzls.zig,.zon需要zig命令可用如果你不希望 OpenCode 自动下载 LSP 服务器可以将环境变量OPENCODE_DISABLE_LSP_DOWNLOAD设置为true来禁用自动下载行为详见文末说明。配置 LSP 服务器LSP 相关配置写在opencode.json的lsp字段中。大多数情况下无需任何配置LSP 会自动启用但在需要定制行为时每个 LSP 服务器支持以下配置项属性类型说明disabledboolean设置为true可禁用该 LSP 服务器commandstring[]启动 LSP 服务器的命令数组形式第一个元素为可执行文件名其余为参数extensionsstring[]该 LSP 服务器负责处理的文件扩展名列表envobject启动服务器时注入的环境变量键为变量名值为变量值initializationobject在 LSPinitialize握手阶段发送给服务器的初始化选项内容因服务器而异1、设置环境变量env使用env属性在启动 LSP 服务器时注入环境变量。常用于开启调试日志或指定运行时所需的路径实例{$schema: https://opencode.ai/config.json,lsp: {rust: {env: {RUST_LOG: debug // 为 rust-analyzer 开启 debug 级别日志方便排查 LSP 问题}}}}2、设置初始化选项initializationinitialization用于向 LSP 服务器传递服务器特定的配置这些选项在 LSP 握手initialize请求阶段一次性发送影响该服务器此后的所有行为实例{$schema: https://opencode.ai/config.json,lsp: {typescript: {initialization: {preferences: {importModuleSpecifierPreference: relative// 告诉 TypeScript LSP 优先使用相对路径导入如 ./utils// 而不是绝对路径如 /src/utils或 tsconfig.json 中配置的路径别名}}}}}初始化选项因 LSP 服务器而异。例如typescript的选项与gopls完全不同使用前请查阅对应 LSP 服务器的官方文档避免传入无效配置。禁用 LSP 服务器1、禁用所有 LSP 服务器如果完全不需要 LSP 功能可以将lsp整体设置为false一次性关闭所有 LSP 服务器实例{$schema: https://opencode.ai/config.json,lsp: false // 全局禁用所有 LSP 服务器适合不需要代码诊断或网络/资源受限的环境}2、禁用特定 LSP 服务器如果只想关闭某一个 LSP 服务器而保留其他的对该服务器单独设置disabled: true实例{$schema: https://opencode.ai/config.json,lsp: {typescript: {disabled: true // 只禁用 TypeScript LSP其他语言的 LSP 服务器不受影响}}}添加自定义 LSP 服务器如果你使用的语言不在内置支持列表中可以通过指定command和extensions来手动添加任意 LSP 服务器只要该服务器遵循标准的 LSP 协议并支持--stdio模式通过标准输入输出通信即可实例{$schema: https://opencode.ai/config.json,lsp: {custom-lsp: { // 自定义键名可随意命名用于在配置中标识该服务器command: [custom-lsp-server, --stdio], // 启动命令第一个元素是可执行文件名// 其余元素是传给它的启动参数// --stdio 表示通过标准输入输出与 OpenCode 通信extensions: [.custom] // 指定该 LSP 服务器处理哪些文件扩展名}}}还可以同时为自定义 LSP 服务器配置环境变量和初始化选项与内置服务器写法完全一致实例{$schema: https://opencode.ai/config.json,lsp: {my-lang-server: {command: [my-lang-server, --stdio, --log-level, warn],extensions: [.mylang, .ml2], // 支持同时绑定多个文件扩展名env: {MY_LSP_HOME: /usr/local/my-lang // 为服务器进程注入所需的环境变量},initialization: {formatOnSave: true // 传递该服务器文档中定义的初始化选项}}}}补充说明PHP Intelephense 许可证PHP Intelephense 提供免费版和付费高级版。高级版通过许可证密钥解锁包含导入整理、代码折叠、调用层级查看等增强功能。如果你购买了许可证将密钥单独写入以下路径的文本文件中即可自动激活无需任何额外配置操作系统许可证文件路径macOS / Linux$HOME/intelephense/license.txtWindows%USERPROFILE%/intelephense/license.txt许可证文件中只需包含许可证密钥本身不要添加任何其他内容包括多余的空格或换行符否则可能导致激活失败。禁用自动下载OpenCode 默认会在检测到对应文件扩展名时自动从网络下载所需的 LSP 服务器。如果你处于网络受限的环境或希望完全手动管理 LSP 工具可以通过设置以下环境变量来禁用自动下载# Linux / macOS临时禁用仅当前终端会话有效 export OPENCODE_DISABLE_LSP_DOWNLOADtrue # Linux / macOS永久禁用写入 shell 配置文件 echo export OPENCODE_DISABLE_LSP_DOWNLOADtrue ~/.bashrc source ~/.bashrc # WindowsPowerShell仅当前会话 $env:OPENCODE_DISABLE_LSP_DOWNLOAD true禁用后OpenCode 不会再自动下载任何 LSP 服务器但已预先安装在系统中的 LSP 工具仍然可以正常被检测和使用。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧