OpenCode-LSP-Server-Konfiguration
OpenCode integriert sich tiefgehend in das Language Server Protocol (LSP) und verwendet LSP-Server, um LLMs Echtzeit-Feedback wie Code-Diagnosen und Fehlerhinweise bereitzustellen, wodurch die KI Ihre Codebasis genauer verstehen und bearbeiten kann.
Einfach ausgedrückt ist ein LSP-Server eine Komponente, die OpenCode die Fähigkeit gibt, „Code zu lesen“, ähnlich wie Plugins in VS Code, die Codevervollständigung und Fehlerhinweise bereitstellen. Wenn in einer Datei ein Syntaxfehler oder Typkonflikt auftritt, gibt der LSP-Server diese Diagnoseinformationen an das LLM zurück, wodurch es genauere Änderungen vornehmen kann.
Funktionsweise
Die LSP-Integration von OpenCode ist vollautomatisch und erfordert keinen manuellen Eingriff. Wenn OpenCode eine Datei öffnet, führt es den folgenden Prozess in dieser Reihenfolge aus:
打开文件 │ ▼ 读取文件扩展名(如 .ts、.py、.go) │ ▼ 与所有已启用的 LSP 服务器进行匹配 │ ├── 匹配成功且服务器已运行 → 直接使用 │ └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器
Der gesamte Prozess läuft still im Hintergrund ab. Sobald der LSP-Server startet, stellt er kontinuierlich Diagnoseinformationen für die aktuelle Sitzung bereit.
Integrierte LSP-Server
OpenCode bietet integrierte LSP-Server-Unterstützung für gängige Sprachen,Wenn die entsprechende Dateiendung erkannt wird und die relevanten Anforderungen erfüllt sind, wird der LSP-Server automatisch aktiviert, und in den meisten Fällen ist keine Konfiguration erforderlich.
| LSP-Server | Unterstützte Dateiendungen | Aktivierungsanforderungen |
|---|---|---|
astro |
.astro |
Automatisch für Astro-Projekte installiert |
bash |
.sh, .bash, .zsh, .ksh |
Installiert bash-language-server automatisch |
clangd |
.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ |
Wird für C/C++-Projekte automatisch installiert |
csharp |
.cs |
Erfordert, dass .NET SDK installiert ist |
clojure-lsp |
.clj, .cljs, .cljc, .edn |
Erfordertclojure-lspBefehl muss verfügbar sein |
dart |
.dart |
ErfordertdartBefehl muss verfügbar sein |
deno |
.ts, .tsx, .js, .jsx, .mjs |
ErfordertdenoBefehl muss verfügbar sein, und das Projekt muss enthaltendeno.jsonoderdeno.jsonc(automatisch erkannt) |
elixir-ls |
.ex, .exs |
ErfordertelixirBefehl muss verfügbar sein |
eslint |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue |
Das Projekt musseslintAbhängigkeit installiert haben |
fsharp |
.fs, .fsi, .fsx, .fsscript |
Erfordert, dass .NET SDK installiert ist |
gleam |
.gleam |
ErfordertgleamBefehl muss verfügbar sein |
gopls |
.go |
ErfordertgoBefehl muss verfügbar sein |
hls |
.hs, .lhs |
Erforderthaskell-language-server-wrapperBefehl muss verfügbar sein |
jdtls |
.java |
Erfordert, dass Java SDK (Version 21 oder höher) installiert ist |
julials |
.jl |
erfordert InstallationjuliaundLanguageServer.jlPaket |
kotlin-ls |
.kt, .kts |
Wird für Kotlin-Projekte automatisch installiert |
lua-ls |
.lua |
Automatisch für Lua-Projekte installiert |
nixd |
.nix |
ErfordertnixdBefehl muss verfügbar sein |
ocaml-lsp |
.ml, .mli |
ErfordertocamllspBefehl muss verfügbar sein |
oxlint |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte |
Das Projekt mussoxlintAbhängigkeit installiert haben |
php intelephense |
.php |
Automatisch für PHP-Projekte installiert |
prisma |
.prisma |
ErfordertprismaBefehl muss verfügbar sein |
pyright |
.py, .pyi |
erfordertpyrightzu installierende Abhängigkeit |
ruby-lsp |
.rb, .rake, .gemspec, .ru |
ErfordertrubyundgemBefehl muss verfügbar sein |
rust |
.rs |
Erfordertrust-analyzerBefehl muss verfügbar sein |
sourcekit-lsp |
.swift, .objc, .objcpp |
Erfordert, dass Swift installiert ist (Installation über Xcode unter macOS) |
svelte |
.svelte |
Automatisch für Svelte-Projekte installiert |
terraform |
.tf, .tfvars |
Automatisch von GitHub Releases installiert |
tinymist |
.typ, .typc |
Automatisch von GitHub Releases installiert |
typescript |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts |
Das Projekt musstypescriptAbhängigkeit installiert haben |
vue |
.vue |
Automatisch für Vue-Projekte installiert |
yaml-ls |
.yaml, .yml |
Installiert automatisch Red Hat yaml-language-server |
zls |
.zig, .zon |
ErfordertzigBefehl muss verfügbar sein |
Wenn du nicht möchtest, dass OpenCode LSP-Server automatisch herunterlädt, kannst du die Umgebungsvariable festlegenOPENCODE_DISABLE_LSP_DOWNLOADauftrueum das automatische Downloadverhalten zu deaktivieren. Weitere Details findest du in den Hinweisen am Ende dieses Artikels.
LSP-Server konfigurieren
Die LSP-bezogene Konfiguration wird in dieopencode.jsonvonlspFeld. In den meisten Fällen ist keine Konfiguration erforderlich und LSP wird automatisch aktiviert; wenn jedoch benutzerdefiniertes Verhalten benötigt wird, unterstützt jeder LSP-Server die folgenden Konfigurationselemente:
| Eigenschaft | Type | Beschreibung |
|---|---|---|
disabled |
boolean |
Setzen auftrueum diesen LSP-Server zu deaktivieren |
command |
string[] |
Befehl zum Starten des LSP-Servers (als Array; das erste Element ist der Name der ausführbaren Datei, die übrigen sind Argumente) |
extensions |
string[] |
Liste der Dateiendungen, die von diesem LSP-Server verarbeitet werden |
env |
object |
Umgebungsvariablen, die beim Starten des Servers injiziert werden; Schlüssel sind Variablennamen, Werte sind Variablenwerte |
initialization |
object |
Während der LSPinitialize-Handshake-Phase werden Initialisierungsoptionen an den Server gesendet; der Inhalt variiert je nach Server |
1. Umgebungsvariablen setzen (env)
Verwenden Sie dieenvEigenschaft, um beim Starten des LSP-Servers Umgebungsvariablen zu injizieren. Wird häufig verwendet, um Debug-Logging zu aktivieren oder Pfade anzugeben, die von der Laufzeit benötigt werden:
Beispiel
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug" // Aktiviert Debug-Level-Logging für rust-analyzer, um die LSP-Fehlerbehebung zu erleichtern
}
}
}
}
2. Initialisierungsoptionen festlegen (initialization)
initializationWird verwendet, um serverspezifische Konfiguration an den LSP-Server zu übergeben. Diese Optionen werden einmal während des LSP-Handshakes (initializerequest)-Phase gesendet und beeinflussen das gesamte nachfolgende Verhalten des Servers:
Beispiel
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
// Teilt dem TypeScript-LSP mit, Importe mit relativem Pfad zu bevorzugen (z. B. ./utils)
// anstelle von absoluten Pfaden (z. B. /src/utils) oder in tsconfig.json konfigurierten Pfadaliasen
}
}
}
}
}
Initialisierungsoptionen variieren je nach LSP-Server. Zum Beispieltypescriptdie Optionen fürgoplssind völlig unterschiedlich; konsultieren Sie vor der Verwendung die offizielle Dokumentation des entsprechenden LSP-Servers, um die Übergabe einer ungültigen Konfiguration zu vermeiden.
LSP-Server deaktivieren
1. Alle LSP-Server deaktivieren
Wenn Sie LSP-Funktionalität überhaupt nicht benötigen, können Sielspvollständig auffalse, wodurch alle LSP-Server auf einmal deaktiviert werden:
Beispiel
"$schema": "https://opencode.ai/config.json",
"lsp": false // Deaktiviert global alle LSP-Server; geeignet für Umgebungen, die keine Code-Diagnose benötigen oder nur begrenzte Netzwerk-/Ressourcenkapazitäten haben
}
2. Einen bestimmten LSP-Server deaktivieren
Wenn Sie nur einen LSP-Server deaktivieren möchten und die anderen beibehalten wollen, legen Sie dies individuell für diesen Server festdisabled: true:
Beispiel
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true // Deaktiviert nur den TypeScript-LSP; LSP-Server für andere Sprachen sind nicht betroffen
}
}
}
Benutzerdefinierte LSP-Server hinzufügen
Wenn die von Ihnen verwendete Sprache nicht in der integrierten Unterstützungsliste enthalten ist, können Sie angeben,commandundextensionsum jeden LSP-Server manuell hinzuzufügen, sofern der Server das Standard-LSP-Protokoll befolgt und unterstützt--stdioModus (Kommunikation über Standard-Eingabe/-Ausgabe):
Beispiel
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": { // Benutzerdefinierter Schlüsselname; kann beliebig benannt werden, dient zur Identifizierung des Servers in der Konfiguration
"command": ["custom-lsp-server", "--stdio"], // Startbefehl: Das erste Element ist der Name der ausführbaren Datei,
// Die übrigen Elemente sind die an ihn übergebenen Startargumente
// --stdio gibt die Kommunikation mit OpenCode über Standard-Eingabe/-Ausgabe an
"extensions": [".custom"] // Gibt an, welche Dateiendungen dieser LSP-Server verarbeitet
}
}
}
Sie können auch Umgebungsvariablen und Initialisierungsoptionen für einen benutzerdefinierten LSP-Server konfigurieren, genau wie für integrierte Server:
Beispiel
"$schema": "https://opencode.ai/config.json",
"lsp": {
"my-lang-server": {
"command": ["my-lang-server", "--stdio", "--log-level", "warn"],
"extensions": [".mylang", ".ml2"], // Unterstützt das gleichzeitige Binden mehrerer Dateiendungen
"env": {
"MY_LSP_HOME": "/usr/local/my-lang" // Fügt die erforderlichen Umgebungsvariablen für den Serverprozess ein
},
"initialization": {
"formatOnSave": true // Übergibt die in der Dokumentation des Servers definierten Initialisierungsoptionen
}
}
}
}
Zusätzliche Hinweise
PHP Intelephense Lizenz
PHP Intelephense bietet eine kostenlose Version und eine kostenpflichtige Premium-Version. Die Premium-Version wird über einen Lizenzschlüssel freigeschaltet und enthält erweiterte Funktionen wie Import-Sortierung, Code-Faltung, Anzeige der Aufrufhierarchie und mehr. Wenn Sie eine Lizenz erworben haben, schreiben Sie den Schlüssel einfach in eine Textdatei unter dem folgenden Pfad, um sie automatisch zu aktivieren, ohne zusätzliche Konfiguration:
| Betriebssystem | Pfad der Lizenzdatei |
|---|---|
| macOS / Linux | $HOME/intelephense/license.txt |
| Windows | %USERPROFILE%/intelephense/license.txt |
Die Lizenzdatei sollte nur den Lizenzschlüssel selbst enthalten. Fügen Sie keine anderen Inhalte hinzu (einschließlich zusätzlicher Leerzeichen oder Zeilenumbrüche), da die Aktivierung sonst fehlschlagen kann.
Automatischen Download deaktivieren
Standardmäßig lädt OpenCode den erforderlichen LSP-Server automatisch aus dem Netzwerk herunter, wenn es eine entsprechende Dateiendung erkennt. Wenn Sie sich in einer netzwerkbeschränkten Umgebung befinden oder LSP-Tools lieber vollständig manuell verwalten möchten, können Sie automatische Downloads deaktivieren, indem Sie die folgende Umgebungsvariable setzen:
# Linux / macOS:临时禁用(仅当前终端会话有效) export OPENCODE_DISABLE_LSP_DOWNLOAD=true # Linux / macOS:永久禁用(写入 shell 配置文件) echo 'export OPENCODE_DISABLE_LSP_DOWNLOAD=true' >> ~/.bashrc source ~/.bashrc # Windows(PowerShell:仅当前会话) $env:OPENCODE_DISABLE_LSP_DOWNLOAD = "true"
Nach der Deaktivierung lädt OpenCode keine LSP-Server mehr automatisch herunter, aber bereits auf dem System vorinstallierte LSP-Tools können weiterhin erkannt und normal verwendet werden.
Andere Erweiterungen