lsp.vim 配置指南:30+ 种语言服务器注册代码全收录

发布时间:2026/8/20 19:53:15
lsp.vim 配置指南:30+ 种语言服务器注册代码全收录 lsp.vim 配置指南30 种语言服务器注册代码全收录【免费下载链接】lspLanguage Server Protocol (LSP) plugin for Vim9项目地址: https://gitcode.com/gh_mirrors/lsp/lsp如果你正在寻找一款轻量、纯 Vim9 脚本编写、无需 Neovim 也能畅享 Language Server ProtocolLSP能力的插件那么lsp.vim就是答案。本篇文章是一份面向新手的lsp.vim 配置指南重点解决语言服务器注册这一核心问题并一次性全收录 30 种语言服务器注册代码从 clangd、gopls、rust-analyzer 到 pyright、tsserver、omnisharp复制粘贴即可用帮你快速搭建完整的 Vim 智能开发环境。✨什么是 lsp.vim为什么选择它lsp.vim 是 Language Server Protocol (LSP) 的 Vim 插件要求 Vim 9.0 及以上版本全程使用 Vim9 脚本编写性能出色且零外部运行时依赖。它支持的功能非常全面代码补全、跳转定义、悬停文档、签名帮助、诊断信息、重命名、代码操作、折叠、Inlay Hints、语义高亮等 20 项 LSP 核心能力。更难得的是它不依赖 Node.js、Python 等运行时只要 Vim 本体即可工作。快速开始lsp.vim 安装与基础配置使用 vim-plug 等插件管理器安装最省心在.vimrc中加上call plug#begin(~/.vim/plugged) Plug yegappan/lsp call plug#end()也可以手动安装到 packpath 中packadd lsp后执行helptags生成帮助标签。安装完成后最关键的一步就是注册语言服务器。lsp.vim 本身不打包任何语言服务器你需要为所用语言单独安装对应的 server 可执行文件再通过注册代码告诉插件哪个 server 服务哪种文件类型。完整的注册示例可参考官方文档 doc/configs.mdAPI 说明见 doc/lsp.txt。理解 LspAddServer 注册语法lsp.vim 通过LspAddServer()或全局g:LspAddServer()函数注册服务器接受一个字典列表每个字典描述一个服务器。核心字段如下字段说明示例name服务器名称用于日志与调试clangdfiletype服务的文件类型字符串或列表[c, cpp]path服务器可执行文件路径/usr/local/bin/clangdargs启动参数列表[--background-index]syncInit是否同步等待初始化完成v:truerootSearch项目根目录识别标记[*.cabal, hie.yaml]initializationOptions传给服务器的初始化选项#{enable: v:true}workspaceConfig工作区配置如 gopls、yaml schemas#{gopls: #{...}}注册逻辑的源码实现位于 autoload/lsp/lsp.vim 的AddServer()函数约 L934 行它会自动校验filetype和path是否有效并支持ignoreMissingServer选项跳过缺失的服务器。30 种语言服务器注册代码全收录下面按语言分类给出注册代码全部来自官方配置文件 doc/configs.md你可以按需挑选。路径如与你的实际安装位置不符直接改成你的可执行文件路径即可。C/Cclangdcall LspAddServer([#{name: clangd, \ filetype: [c, cpp], \ path: /usr/local/bin/clangd, \ args: [--background-index, --clang-tidy] \ }])Gogoplscall LspAddServer([#{name: gopls, \ filetype: go, \ path: /usr/local/bin/gopls, \ args: [serve] \ }])gopls 还支持 Inlay Hints只需在注册代码中追加workspaceConfig里的hints配置即可显示参数名、变量类型等提示。Rustrust-analyzercall LspAddServer([#{name: rustanalyzer, \ filetype: [rust], \ path: /usr/local/bin/rust-analyzer, \ args: [], \ syncInit: v:true \ }])Rust 项目通常较大建议加上syncInit: v:true等待服务器初始化完成避免首次操作卡顿。Python四种服务器任选Python 生态选择最多按需选用 Pyright微软官方类型检查强 call LspAddServer([#{name: pyright, \ filetype: python, \ path: /usr/local/node_modules/.bin/pyright-langserver, \ args: [--stdio] \ }]) Pylsppython-lsp-server社区经典 call LspAddServer([#{name: pylsp, \ filetype: python, \ path: /usr/local/bin/pylsp, \ args: [] \ }]) Jedi轻量、启动快 call LspAddServer([#{name: jedi, \ filetype: python, \ path: /usr/local/bin/jedi-language-server, \ args: [] \ }]) RuffRust 写的超快 linter 语言服务器 call LspAddServer([#{name: ruff, \ filetype: python, \ path: /usr/local/bin/ruff, \ args: [server] \ }])JavaScript / TypeScripttsserver 与全家桶 typescript-language-server call LspAddServer([#{name: tsserver, \ filetype: [javascript, typescript], \ path: /usr/local/bin/typescript-language-server, \ args: [--stdio] \ }]) DenoDeno 自带 LSP call LspAddServer([#{name: deno, \ filetype: [javascript, typescript], \ path: /usr/local/bin/deno, \ args: [lsp] \ }]) Biome新一代前端工具链 call LspAddServer([#{name: biome, \ filetype: [javascript, javascriptreact, typescript, typescriptreact], \ path: /usr/local/bin/biome, \ args: [lsp-proxy] \ }])JavaEclipse JDTLScall LspAddServer([#{name: jdtls, \ filetype: java, \ path: /usr/local/jdtls/bin/jdtls, \ args: [], \ initializationOptions: #{ \ settings: #{ \ java: #{ \ completion: #{ \ filteredTypes: [com.sun.*, java.awt.*, jdk.*, sun.*] \ } \ } \ } \ } \ }])C#Omnisharpcall LspAddServer([#{name: omnisharp, \ filetype: cs, \ path: expand($HOME/omnisharp/omnisharp.exe), \ args: [-z, --languageserver, --encoding, utf-8] \ }])PHPIntelephensecall LspAddServer([#{name: intelephense, \ filetype: [php], \ path: /usr/local/bin/intelephense, \ args: [--stdio] \ }])RubySolargraphcall LspAddServer([#{name: solargraph, \ filetype: [ruby], \ path: solargraph, \ args: [stdio], \ initializationOptions: #{ formatting: v:true } \ }])Lualua-language-servercall LspAddServer([#{name: luals, \ filetype: lua, \ path: /usr/local/luals/bin/lua-language-server, \ args: [] \ }])前端框架VolarVue与 Svelte Volar 2.x call LspAddServer([#{name: vue-ls, \ filetype: [vue], \ path: vue-language-server, \ args: [--stdio], \ initializationOptions: #{ \ typescript: #{ \ tsdk: /usr/local/node_modules/typescript/lib \ } \ } \ }]) Svelte call LspAddServer([#{name: svelte, \ filetype: [svelte], \ path: /usr/local/node_modules/.bin/svelteserver, \ args: [--stdio] \ }])脚本语言Bash、AWK、Perl、Vimscript Bash call LspAddServer([#{name: bashls, \ filetype: sh, \ path: /usr/local/bin/bash-language-server, \ args: [start] \ }]) AWK call LspAddServer([#{name: awkls, \ filetype: awk, \ path: /usr/local/bin/awk-language-server, \ args: [] \ }]) Perl Navigator call LspAddServer([#{name: perlnavigator, \ filetype: [perl], \ path: /usr/bin/node, \ args: [/usr/local/PerlNavigator/server/out/server.js, --stdio] \ }]) Vimscript用 Vim 写 Vim 插件也能智能补全 call LspAddServer([#{name: vimls, \ filetype: vim, \ path: /usr/local/bin/vim-language-server, \ args: [--stdio] \ }])Markdown 与文档Marksmancall LspAddServer([#{name: marksman, \ filetype: md, \ path: marksman-linux-x64, \ args: [server] \ }])更多语言服务器一览除了上面贴出代码的官方配置还收录了以下服务器的注册代码全部可以在 doc/configs.md 中直接复制语言/场景服务器名称Haskellhaskell-language-server (hls)JuliaJETLS.jlDartdart language-serverSwiftsourcekit-lsp (swiftls)FortranfortlsValavala-language-serverVerilog/SystemVerilogveribleVHDLvhdl_lsOdinolsPKLpkl-lspHTMLhtml-languageserver / vscode-html-language-serverCSS / Tailwindcssls / tailwindcss-language-serverJSONvscode-json-language-serverYAMLyaml-language-serverMarkdownvscode-markdown-language-serverESLintvscode-eslint-language-serverAngular 模板ngserverBitbakebitbake-language-server / language-server-bitbake拼写检查cspell-lsp通用 linter/formatterefm-langserverHTML 快速编辑emmet-language-server至此语言服务器注册已覆盖 30 种几乎囊括主流编程语言。注册代码进阶技巧1. 用 rootSearch 精确识别项目根目录对 Haskell 等依赖项目结构的语言指定根目录标记可让服务器更快找到配置call LspAddServer([#{name: hls, \ filetype: [haskell, lhaskell], \ rootSearch: [*.cabal, stack.yaml, cabal.project, hie.yaml], \ path: haskell-language-server-wrapper, \ args: [--lsp] \ }])2. 用 LspOptionsSet 微调体验注册服务器后可通过LspOptionsSet()调整插件行为常用选项包括autoComplete自动补全、showInlayHints内联提示、highlightDiagInline行内诊断高亮、hoverInPreview预览窗口悬停等。完整选项列表见 doc/lsp.txt 的lsp-options章节。call LspOptionsSet(#{autoComplete: v:true, \ showInlayHints: v:true, \ snippetSupport: v:true \ })3. 一个文件类型挂多个服务器通过features字段可以为同一文件类型挂载多个服务器并各司其职比如 clangd 负责补全、cspell-lsp 负责拼写检查。常用 LSP 命令速查注册完成并打开对应语言的文件后以下命令立即可用命令定义见 plugin/lsp.vim命令功能:LspHover悬停查看类型与文档:LspGotoDefinition/:LspGotoImpl跳转定义 / 实现:LspPeekReferences预览窗口查看引用:LspRename全局重命名符号:LspFormat格式化代码:LspDiag next/:LspDiag show诊断跳转 / 列表:LspDocumentSymbol/:LspOutline符号列表 / 大纲:LspCodeAction/:LspFixAll代码操作 / 快速修复:LspShowAllServers查看已注册服务器:LspServer查看服务器状态与日志常见问题排查注册后无反应先用:LspShowAllServers确认服务器已注册再用:LspServer查看日志path必须指向真实可执行文件缺失时插件会提示 LSP server xxx is not found。补全不弹出检查LspOptionsSet中autoComplete是否为v:trueCSS/HTML/JSON 服务器还需要开启snippetSupport才能获得补全。多语言项目混乱合理使用rootSearch和features字段让每个服务器只管自己负责的文件类型。配置好这些语言服务器注册代码后你的 Vim 就拥有了媲美 IDE 的智能开发体验。还想要更多语言欢迎补充到官方配置文档让这份全收录更完整【免费下载链接】lspLanguage Server Protocol (LSP) plugin for Vim9项目地址: https://gitcode.com/gh_mirrors/lsp/lsp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考