-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path19.html
More file actions
276 lines (276 loc) · 25.5 KB
/
Copy path19.html
File metadata and controls
276 lines (276 loc) · 25.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="CodeClub - OpenCode LSP 服务器配置" />
<meta name="author" content="Jackson" />
<title>OpenCode LSP 服务器配置 - CodeClub</title>
<link rel="icon" type="image/x-icon" href="../../img/logo.png" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
crossorigin="anonymous"
referrerpolicy="no-referrer"
/>
<link rel="stylesheet" href="../../css/main.css" />
<link rel="stylesheet" href="../../css/dark-mode.css" />
<link rel="stylesheet" href="../../css/mobile-optimizations.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/12.0.0/marked.min.js"></script>
<style>
.tutorial-page {
max-width: 1200px;
margin: 70px auto 40px;
padding: 0 20px;
display: flex;
gap: 20px;
}
.tutorial-sidebar {
width: 240px;
flex-shrink: 0;
position: sticky;
top: 70px;
max-height: calc(100vh - 90px);
overflow-y: auto;
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-sidebar h3 {
font-size: 15px;
margin: 0 0 12px;
color: var(--text-primary, #1a1a2e);
padding-bottom: 8px;
border-bottom: 2px solid var(--primary, #3b82f6);
}
.tutorial-sidebar a {
display: block;
padding: 5px 8px;
color: var(--text-secondary, #666);
text-decoration: none;
font-size: 13px;
border-radius: 4px;
line-height: 1.4;
}
.tutorial-sidebar a:hover {
background: var(--primary, #3b82f6);
color: #fff;
}
.tutorial-sidebar a.active {
background: var(--primary, #3b82f6);
color: #fff;
font-weight: 600;
}
.tutorial-main {
flex: 1;
min-width: 0;
}
.tutorial-article {
background: var(--bg-secondary, #fff);
border-radius: 8px;
padding: 32px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.tutorial-article h1 {
font-size: 26px;
margin-bottom: 16px;
color: var(--text-primary, #1a1a2e);
border-bottom: 2px solid var(--primary, #3b82f6);
padding-bottom: 12px;
}
.markdown-body {
font-size: 15px;
line-height: 1.8;
color: var(--text-secondary, #333);
}
.markdown-body h1 {
font-size: 24px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 8px;
}
.markdown-body h2 {
font-size: 20px;
border-bottom: 1px solid var(--border, #e5e7eb);
padding-bottom: 6px;
}
.markdown-body h3 {
font-size: 17px;
}
.markdown-body pre {
background: #1e1e2e;
color: #cdd6f4;
padding: 16px;
border-radius: 8px;
overflow-x: auto;
}
.markdown-body code {
font-family: 'Fira Code', 'Cascadia Code', monospace;
font-size: 14px;
}
.markdown-body p code {
background: #f1f5f9;
padding: 2px 6px;
border-radius: 4px;
color: #e83e8c;
}
.markdown-body blockquote {
border-left: 4px solid var(--primary, #3b82f6);
padding: 12px 20px;
margin: 16px 0;
background: #f8fafc;
border-radius: 0 8px 8px 0;
}
.markdown-body img {
max-width: 100%;
border-radius: 8px;
}
.markdown-body table {
border-collapse: collapse;
width: 100%;
margin: 16px 0;
}
.markdown-body table th,
.markdown-body table td {
border: 1px solid var(--border, #e5e7eb);
padding: 8px 12px;
text-align: left;
}
.markdown-body table th {
background: var(--bg-primary, #f8fafc);
font-weight: 600;
}
.markdown-body table tr:nth-child(2n) {
background: var(--bg-primary, #f8fafc);
}
.markdown-body ul,
.markdown-body ol {
padding-left: 24px;
margin: 12px 0;
}
.markdown-body li {
margin: 4px 0;
}
.markdown-body hr {
border: none;
border-top: 1px solid var(--border, #e5e7eb);
margin: 24px 0;
}
.markdown-body a {
color: var(--primary, #3b82f6);
text-decoration: none;
}
.markdown-body a:hover {
text-decoration: underline;
}
.page-navigation {
display: flex;
justify-content: space-between;
margin-top: 24px;
padding-top: 16px;
border-top: 1px solid var(--border, #e5e7eb);
}
.page-nav-link {
color: var(--primary, #3b82f6);
text-decoration: none;
font-weight: 500;
font-size: 14px;
}
.page-nav-link:hover {
text-decoration: underline;
}
.source-link {
margin-top: 16px;
font-size: 13px;
color: var(--text-secondary, #999);
}
.source-link a {
color: var(--primary, #3b82f6);
}
@media (max-width: 768px) {
.tutorial-page {
flex-direction: column;
}
.tutorial-sidebar {
width: 100%;
position: static;
max-height: 200px;
}
}
</style>
</head>
<body>
<nav class="navbar">
<div class="navbar-container">
<a class="navbar-brand" href="../../index.html">
<img src="../../img/logo.png" alt="CodeClub" width="32" height="32" />
<span>CodeClub</span>
</a>
<button class="mobile-menu-toggle" aria-label="切换导航菜单"><span></span><span></span><span></span></button>
<ul class="navbar-nav">
<li><a class="nav-link" href="../../index.html">首页</a></li>
<li><a class="nav-link" href="../../nav.html">网址导航</a></li>
<li><a class="nav-link" href="../../blog/">博客</a></li>
<li><a class="nav-link" href="../../wiki/index.html" target="_blank">WiKi</a></li>
<li><a class="nav-link active" href="../index.html">教程</a></li>
<li><a class="nav-link" href="../../book.html">图书</a></li>
<li><a class="nav-link" href="../../contact.html">联系我</a></li>
<li><a class="nav-link" href="../../about.html">关于我</a></li>
</ul>
</div>
</nav>
<div class="tutorial-page">
<div class="tutorial-sidebar">
<h3>📖 OpenCode</h3>
<a href="0.html">OpenCode 教程</a>
<a href="1.html">OpenCode 简介</a>
<a href="2.html">OpenCode 安装</a>
<a href="3.html">OpenCode 配置</a>
<a href="4.html">OpenCode 第一次使用</a>
<a href="5.html">OpenCode VSCode</a>
<a href="6.html">OpenCode 终端界面</a>
<a href="7.html">OpenCode CLI 使用</a>
<a href="8.html">OpenCode Web 使用</a>
<a href="9.html">OpenCode GitHub</a>
<a href="10.html">OpenCode GitLab</a>
<a href="11.html">OpenCode 工具</a>
<a href="12.html">OpenCode 规则</a>
<a href="13.html">OpenCode 代理</a>
<a href="14.html">OpenCode 主题</a>
<a href="15.html">OpenCode 快捷键</a>
<a href="16.html">OpenCode 自定义命令</a>
<a href="17.html">OpenCode 格式化工具</a>
<a href="18.html">OpenCode 权限配置</a>
<a href="19.html" class="active">OpenCode LSP 服务器配置</a>
<a href="20.html">OpenCode MCP 服务器配置</a>
<a href="21.html">OpenCode Skills</a>
<a href="22.html">OpenCode 自定义工具</a>
</div>
<div class="tutorial-main">
<div class="tutorial-article">
<div class="markdown-body" id="md-content"></div>
<div class="page-navigation">
<a href="18.html" class="page-nav-link">← OpenCode 权限配置</a>
<a href="20.html" class="page-nav-link">OpenCode MCP 服务器配置 →</a>
</div>
<div class="source-link">原文来源:<a href="https://www.runoob.com" target="_blank">菜鸟教程</a></div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer-content"><p>© 2024 CodeClub. All rights reserved.</p></div>
</footer>
<script src="../../js/dark-mode.js"></script>
<script src="../../js/mobile-menu.js"></script>
<script>
const md = `# OpenCode LSP 服务器配置\n\n\nOpenCode 与语言服务器协议(LSP,Language Server Protocol)深度集成,通过 LSP 服务器为 LLM 提供代码诊断、错误提示等实时反馈,帮助 AI 更准确地理解和操作你的代码库。\n\n\n\n简单来说,LSP 服务器就是让 OpenCode 具备"读懂代码"能力的组件,类似于 VS Code 中提供代码补全、错误提示的插件。当文件中出现语法错误或类型不匹配时,LSP 服务器会将这些诊断信息反馈给 LLM,从而做出更准确的修改。\n\n\n\n\n---\n\n\n## 工作原理\n\n\nOpenCode 的 LSP 集成是全自动的,无需手动干预。当 OpenCode 打开一个文件时,会依次执行以下流程:\n\n\n\n\n\`\`\`\n\n打开文件\n │\n ▼\n读取文件扩展名(如 .ts、.py、.go)\n │\n ▼\n与所有已启用的 LSP 服务器进行匹配\n │\n ├── 匹配成功且服务器已运行 → 直接使用\n │\n └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器\n\n\`\`\`\n\n\n整个过程在后台静默完成,LSP 服务器启动后会持续为当前会话提供诊断信息。\n\n\n\n\n---\n\n\n## 内置 LSP 服务器\n\n\nOpenCode 内置了主流语言的 LSP 服务器支持,**当检测到对应文件扩展名且满足相应要求时,LSP 服务器会自动启用**,大部分情况下无需任何配置。\n\n\n\n\n \n \n LSP 服务器\n 支持的文件扩展名\n 启用要求\n \n \n \n \n \`astro\`\n \`.astro\`\n 为 Astro 项目自动安装\n \n \n \`bash\`\n \`.sh\`, \`.bash\`, \`.zsh\`, \`.ksh\`\n 自动安装 bash-language-server\n \n \n \`clangd\`\n \`.c\`, \`.cpp\`, \`.cc\`, \`.cxx\`, \`.c++\`, \`.h\`, \`.hpp\`, \`.hh\`, \`.hxx\`, \`.h++\`\n 为 C/C++ 项目自动安装\n \n \n \`csharp\`\n \`.cs\`\n 需要已安装 .NET SDK\n \n \n \`clojure-lsp\`\n \`.clj\`, \`.cljs\`, \`.cljc\`, \`.edn\`\n 需要 \`clojure-lsp\` 命令可用\n \n \n \`dart\`\n \`.dart\`\n 需要 \`dart\` 命令可用\n \n \n \`deno\`\n \`.ts\`, \`.tsx\`, \`.js\`, \`.jsx\`, \`.mjs\`\n 需要 \`deno\` 命令可用,且项目中存在 \`deno.json\` 或 \`deno.jsonc\`(自动检测)\n \n \n \`elixir-ls\`\n \`.ex\`, \`.exs\`\n 需要 \`elixir\` 命令可用\n \n \n \`eslint\`\n \`.ts\`, \`.tsx\`, \`.js\`, \`.jsx\`, \`.mjs\`, \`.cjs\`, \`.mts\`, \`.cts\`, \`.vue\`\n 项目中需要安装 \`eslint\` 依赖\n \n \n \`fsharp\`\n \`.fs\`, \`.fsi\`, \`.fsx\`, \`.fsscript\`\n 需要已安装 .NET SDK\n \n \n \`gleam\`\n \`.gleam\`\n 需要 \`gleam\` 命令可用\n \n \n \`gopls\`\n \`.go\`\n 需要 \`go\` 命令可用\n \n \n \`hls\`\n \`.hs\`, \`.lhs\`\n 需要 \`haskell-language-server-wrapper\` 命令可用\n \n \n \`jdtls\`\n \`.java\`\n 需要已安装 Java SDK(版本 21 及以上)\n \n \n \`julials\`\n \`.jl\`\n 需要安装 \`julia\` 及 \`LanguageServer.jl\` 包\n \n \n \`kotlin-ls\`\n \`.kt\`, \`.kts\`\n 为 Kotlin 项目自动安装\n \n \n \`lua-ls\`\n \`.lua\`\n 为 Lua 项目自动安装\n \n \n \`nixd\`\n \`.nix\`\n 需要 \`nixd\` 命令可用\n \n \n \`ocaml-lsp\`\n \`.ml\`, \`.mli\`\n 需要 \`ocamllsp\` 命令可用\n \n \n \`oxlint\`\n \`.ts\`, \`.tsx\`, \`.js\`, \`.jsx\`, \`.mjs\`, \`.cjs\`, \`.mts\`, \`.cts\`, \`.vue\`, \`.astro\`, \`.svelte\`\n 项目中需要安装 \`oxlint\` 依赖\n \n \n \`php intelephense\`\n \`.php\`\n 为 PHP 项目自动安装\n \n \n \`prisma\`\n \`.prisma\`\n 需要 \`prisma\` 命令可用\n \n \n \`pyright\`\n \`.py\`, \`.pyi\`\n 需要已安装 \`pyright\` 依赖\n \n \n \`ruby-lsp\`\n \`.rb\`, \`.rake\`, \`.gemspec\`, \`.ru\`\n 需要 \`ruby\` 和 \`gem\` 命令可用\n \n \n \`rust\`\n \`.rs\`\n 需要 \`rust-analyzer\` 命令可用\n \n \n \`sourcekit-lsp\`\n \`.swift\`, \`.objc\`, \`.objcpp\`\n 需要已安装 Swift(macOS 上通过 Xcode 安装)\n \n \n \`svelte\`\n \`.svelte\`\n 为 Svelte 项目自动安装\n \n \n \`terraform\`\n \`.tf\`, \`.tfvars\`\n 从 GitHub Releases 自动安装\n \n \n \`tinymist\`\n \`.typ\`, \`.typc\`\n 从 GitHub Releases 自动安装\n \n \n \`typescript\`\n \`.ts\`, \`.tsx\`, \`.js\`, \`.jsx\`, \`.mjs\`, \`.cjs\`, \`.mts\`, \`.cts\`\n 项目中需要安装 \`typescript\` 依赖\n \n \n \`vue\`\n \`.vue\`\n 为 Vue 项目自动安装\n \n \n \`yaml-ls\`\n \`.yaml\`, \`.yml\`\n 自动安装 Red Hat yaml-language-server\n \n \n \`zls\`\n \`.zig\`, \`.zon\`\n 需要 \`zig\` 命令可用\n \n \n\n\n如果你不希望 OpenCode 自动下载 LSP 服务器,可以将环境变量 \`OPENCODE_DISABLE_LSP_DOWNLOAD\` 设置为 \`true\` 来禁用自动下载行为,详见文末说明。\n\n\n\n\n---\n\n\n## 配置 LSP 服务器\n\n\nLSP 相关配置写在 \`opencode.json\` 的 \`lsp\` 字段中。大多数情况下无需任何配置,LSP 会自动启用;但在需要定制行为时,每个 LSP 服务器支持以下配置项:\n\n\n\n\n \n \n 属性\n 类型\n 说明\n \n \n \n \n \`disabled\`\n \`boolean\`\n 设置为 \`true\` 可禁用该 LSP 服务器\n \n \n \`command\`\n \`string[]\`\n 启动 LSP 服务器的命令(数组形式,第一个元素为可执行文件名,其余为参数)\n \n \n \`extensions\`\n \`string[]\`\n 该 LSP 服务器负责处理的文件扩展名列表\n \n \n \`env\`\n \`object\`\n 启动服务器时注入的环境变量,键为变量名,值为变量值\n \n \n \`initialization\`\n \`object\`\n 在 LSP \`initialize\` 握手阶段发送给服务器的初始化选项,内容因服务器而异\n \n \n\n\n\n### 1、设置环境变量(env)\n\n\n使用 \`env\` 属性在启动 LSP 服务器时注入环境变量。常用于开启调试日志或指定运行时所需的路径:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "lsp": {\n\n "rust": {\n\n "env": {\n\n "RUST_LOG": "debug" // 为 rust-analyzer 开启 debug 级别日志,方便排查 LSP 问题\n\n }\n\n }\n\n }\n\n}\n\n\n\n\n### 2、设置初始化选项(initialization)\n\n\n\`initialization\` 用于向 LSP 服务器传递服务器特定的配置,这些选项在 LSP 握手(\`initialize\` 请求)阶段一次性发送,影响该服务器此后的所有行为:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "lsp": {\n\n "typescript": {\n\n "initialization": {\n\n "preferences": {\n\n "importModuleSpecifierPreference": "relative"\n\n // 告诉 TypeScript LSP 优先使用相对路径导入(如 ./utils)\n\n // 而不是绝对路径(如 /src/utils)或 tsconfig.json 中配置的路径别名\n\n }\n\n }\n\n }\n\n }\n\n}\n\n\n\n初始化选项因 LSP 服务器而异。例如 \`typescript\` 的选项与 \`gopls\` 完全不同,使用前请查阅对应 LSP 服务器的官方文档,避免传入无效配置。\n\n\n\n\n---\n\n\n## 禁用 LSP 服务器\n\n\n\n### 1、禁用所有 LSP 服务器\n\n\n如果完全不需要 LSP 功能,可以将 \`lsp\` 整体设置为 \`false\`,一次性关闭所有 LSP 服务器:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "lsp": false // 全局禁用所有 LSP 服务器,适合不需要代码诊断或网络/资源受限的环境\n\n}\n\n\n\n\n### 2、禁用特定 LSP 服务器\n\n\n如果只想关闭某一个 LSP 服务器而保留其他的,对该服务器单独设置 \`disabled: true\`:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "lsp": {\n\n "typescript": {\n\n "disabled": true // 只禁用 TypeScript LSP,其他语言的 LSP 服务器不受影响\n\n }\n\n }\n\n}\n\n\n\n\n---\n\n\n## 添加自定义 LSP 服务器\n\n\n如果你使用的语言不在内置支持列表中,可以通过指定 \`command\` 和 \`extensions\` 来手动添加任意 LSP 服务器,只要该服务器遵循标准的 LSP 协议并支持 \`--stdio\` 模式(通过标准输入输出通信)即可:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "lsp": {\n\n "custom-lsp": { // 自定义键名,可随意命名,用于在配置中标识该服务器\n\n "command": ["custom-lsp-server", "--stdio"], // 启动命令:第一个元素是可执行文件名,\n\n // 其余元素是传给它的启动参数\n\n // --stdio 表示通过标准输入输出与 OpenCode 通信\n\n "extensions": [".custom"] // 指定该 LSP 服务器处理哪些文件扩展名\n\n }\n\n }\n\n}\n\n\n\n还可以同时为自定义 LSP 服务器配置环境变量和初始化选项,与内置服务器写法完全一致:\n\n\n\n\n## 实例\n\n{\n\n "$schema": "https://opencode.ai/config.json",\n\n "lsp": {\n\n "my-lang-server": {\n\n "command": ["my-lang-server", "--stdio", "--log-level", "warn"],\n\n "extensions": [".mylang", ".ml2"], // 支持同时绑定多个文件扩展名\n\n "env": {\n\n "MY_LSP_HOME": "/usr/local/my-lang" // 为服务器进程注入所需的环境变量\n\n },\n\n "initialization": {\n\n "formatOnSave": true // 传递该服务器文档中定义的初始化选项\n\n }\n\n }\n\n }\n\n}\n\n\n\n\n---\n\n\n## 补充说明\n\n\n\n### PHP Intelephense 许可证\n\n\nPHP Intelephense 提供免费版和付费高级版。高级版通过许可证密钥解锁,包含导入整理、代码折叠、调用层级查看等增强功能。如果你购买了许可证,将密钥单独写入以下路径的文本文件中即可自动激活,无需任何额外配置:\n\n\n\n\n \n \n 操作系统\n 许可证文件路径\n \n \n \n \n macOS / Linux\n \`$HOME/intelephense/license.txt\`\n \n \n Windows\n \`%USERPROFILE%/intelephense/license.txt\`\n \n \n\n\n许可证文件中只需包含许可证密钥本身,不要添加任何其他内容(包括多余的空格或换行符),否则可能导致激活失败。\n\n\n\n\n### 禁用自动下载\n\n\nOpenCode 默认会在检测到对应文件扩展名时自动从网络下载所需的 LSP 服务器。如果你处于网络受限的环境,或希望完全手动管理 LSP 工具,可以通过设置以下环境变量来禁用自动下载:\n\n\n\n\n\`\`\`\n\n# Linux / macOS:临时禁用(仅当前终端会话有效)\nexport OPENCODE_DISABLE_LSP_DOWNLOAD=true\n\n# Linux / macOS:永久禁用(写入 shell 配置文件)\necho \'export OPENCODE_DISABLE_LSP_DOWNLOAD=true\' >> ~/.bashrc\nsource ~/.bashrc\n\n# Windows(PowerShell:仅当前会话)\n$env:OPENCODE_DISABLE_LSP_DOWNLOAD = "true"\n\n\`\`\`\n\n\n禁用后,OpenCode 不会再自动下载任何 LSP 服务器,但已预先安装在系统中的 LSP 工具仍然可以正常被检测和使用。\n\n \n \n \n \n \n\n \n \n [ OpenCode MCP 服务器配置](http://www.runoob.com/opencode/opencode-mcp.html)\n \n\n \n \n \n \n \n\n\n\n\n \n \n \n### 点我分享笔记\n\n \n \n \n \n \n \n [取消](https://www.runoob.comjavascript:;)\n\n\n \n \n \n \n \n \n\n\n 分享笔记\n \n \n \n \n \n \n\n 昵称昵称 (必填)\n 邮箱邮箱 (必填)\n 引用地址引用地址\n \n\n \n \n \n \n\n \n \n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n\n\n \n \n \n \n \n \n\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n\n 在线实例\n\n\n ·[HTML 实例](https://www.runoob.com/html/html-examples.html)\n\n\n ·[CSS 实例](https://www.runoob.com/css/css-examples.html)\n\n\n ·[JavaScript 实例](https://www.runoob.com/js/js-examples.html)\n\n\n ·[Ajax 实例](https://www.runoob.com/ajx/ajax-examples.html)\n\n\n ·[jQuery 实例](https://www.runoob.com/jquery/jquery-examples.html)\n\n\n ·[XML 实例](https://www.runoob.com/xml/xml-examples.html)\n\n\n ·[Java 实例](https://www.runoob.com/java/java-examples.html)\n\n\n\n\n\n 字符集&工具\n\n\n · [HTML 字符集设置](https://www.runoob.com/charsets/html-charsets.html)\n\n\n · [HTML ASCII 字符集](https://www.runoob.com/tags/html-ascii.html)\n\n\n · [JS 混淆/加密](https://www.jyshare.com/front-end/6939/)\n\n\n · [PNG/JPEG 图片压缩](https://www.jyshare.com/front-end/6232/)\n\n\n · [HTML 拾色器](https://www.runoob.com/tags/html-colorpicker.html)\n\n\n · [JSON 格式化工具](https://www.jyshare.com/front-end/53)\n\n\n · [随机数生成器](https://www.jyshare.com/front-end/6680/)\n\n\n\n\n 最新更新\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-custom-tools.html)\n\n\n ·\n [\n OpenCode Skills ](http://www.runoob.com/opencode/opencode-skills.html)\n\n\n ·\n [\n OpenCode MCP 服... ](http://www.runoob.com/opencode/opencode-mcp.html)\n\n\n ·\n [\n OpenCode LSP 服... ](http://www.runoob.com/opencode/opencode-lsp.html)\n\n\n ·\n [\n OpenCode 权限配置 ](http://www.runoob.com/opencode/opencode-permissions.html)\n\n\n ·\n [\n OpenCode 格式化... ](http://www.runoob.com/opencode/opencode-formatter.html)\n\n\n ·\n [\n OpenCode 自定义... ](http://www.runoob.com/opencode/opencode-commands.html)\n\n\n\n\n 站点信息\n\n\n ·\n [意见反馈](https://www.runoob.commailto:admin@runoob.com)\n\n\n ·\n [免责声明](https://www.runoob.com/disclaimer)\n\n\n ·\n [关于我们](https://www.runoob.com/aboutus)\n\n\n ·\n [文章归档](https://www.runoob.com/archives)\n\n\n\n\n\n\n\n **关注微信**\n\n\n\n \n\n\n\n\n\n\n Copyright © 2013-2026 **[菜鸟教程](https://www.runoob.com//www.runoob.com/)** \n **[runoob.com](https://www.runoob.com//www.runoob.com/)** All Rights Reserved. 备案号:[闽ICP备15012807号-1](https://beian.miit.gov.cn/)\n\n\n\n [ ](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n [](https://www.runoob.comjavascript:void(0))\n\n\n\n#### 微信关注\n\n `;
document.getElementById('md-content').innerHTML = marked.parse(md);
</script>
</body>
</html>