器注冊代碼全收錄)
lsp.vim 配置指南30 種語言服務(wù)器注冊代碼全收錄【免費下載鏈接】lspLanguage Server Protocol (LSP) plugin for Vim9項目地址: https://gitcode.com/gh_mirrors/lsp/lsp如果你正在尋找一款輕量、純 Vim9 腳本編寫、無需 Neovim 也能暢享 Language Server ProtocolLSP能力的插件那么lsp.vim就是答案。本篇文章是一份面向新手的lsp.vim 配置指南重點解決語言服務(wù)器注冊這一核心問題并一次性全收錄 30 種語言服務(wù)器注冊代碼從 clangd、gopls、rust-analyzer 到 pyright、tsserver、omnisharp復(fù)制粘貼即可用幫你快速搭建完整的 Vim 智能開發(fā)環(huán)境。?什么是 lsp.vim為什么選擇它lsp.vim 是 Language Server Protocol (LSP) 的 Vim 插件要求 Vim 9.0 及以上版本全程使用 Vim9 腳本編寫性能出色且零外部運行時依賴。它支持的功能非常全面代碼補全、跳轉(zhuǎn)定義、懸停文檔、簽名幫助、診斷信息、重命名、代碼操作、折疊、Inlay Hints、語義高亮等 20 項 LSP 核心能力。更難得的是它不依賴 Node.js、Python 等運行時只要 Vim 本體即可工作??焖匍_始lsp.vim 安裝與基礎(chǔ)配置使用 vim-plug 等插件管理器安裝最省心在.vimrc中加上call plug#begin(~/.vim/plugged) Plug yegappan/lsp call plug#end()也可以手動安裝到 packpath 中packadd lsp后執(zhí)行helptags生成幫助標(biāo)簽。安裝完成后最關(guān)鍵的一步就是注冊語言服務(wù)器。lsp.vim 本身不打包任何語言服務(wù)器你需要為所用語言單獨安裝對應(yīng)的 server 可執(zhí)行文件再通過注冊代碼告訴插件哪個 server 服務(wù)哪種文件類型。完整的注冊示例可參考官方文檔 doc/configs.mdAPI 說明見 doc/lsp.txt。理解 LspAddServer 注冊語法lsp.vim 通過LspAddServer()或全局g:LspAddServer()函數(shù)注冊服務(wù)器接受一個字典列表每個字典描述一個服務(wù)器。核心字段如下字段說明示例name服務(wù)器名稱用于日志與調(diào)試clangdfiletype服務(wù)的文件類型字符串或列表[c, cpp]path服務(wù)器可執(zhí)行文件路徑/usr/local/bin/clangdargs啟動參數(shù)列表[--background-index]syncInit是否同步等待初始化完成v:truerootSearch項目根目錄識別標(biāo)記[*.cabal, hie.yaml]initializationOptions傳給服務(wù)器的初始化選項#{enable: v:true}workspaceConfig工作區(qū)配置如 gopls、yaml schemas#{gopls: #{...}}注冊邏輯的源碼實現(xiàn)位于 autoload/lsp/lsp.vim 的AddServer()函數(shù)約 L934 行它會自動校驗filetype和path是否有效并支持ignoreMissingServer選項跳過缺失的服務(wù)器。30 種語言服務(wù)器注冊代碼全收錄下面按語言分類給出注冊代碼全部來自官方配置文件 doc/configs.md你可以按需挑選。路徑如與你的實際安裝位置不符直接改成你的可執(zhí)行文件路徑即可。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配置即可顯示參數(shù)名、變量類型等提示。Rustrust-analyzercall LspAddServer([#{name: rustanalyzer, \ filetype: [rust], \ path: /usr/local/bin/rust-analyzer, \ args: [], \ syncInit: v:true \ }])Rust 項目通常較大建議加上syncInit: v:true等待服務(wù)器初始化完成避免首次操作卡頓。Python四種服務(wù)器任選Python 生態(tài)選擇最多按需選用 Pyright微軟官方類型檢查強 call LspAddServer([#{name: pyright, \ filetype: python, \ path: /usr/local/node_modules/.bin/pyright-langserver, \ args: [--stdio] \ }]) Pylsppython-lsp-server社區(qū)經(jīng)典 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 語言服務(wù)器 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] \ }])更多語言服務(wù)器一覽除了上面貼出代碼的官方配置還收錄了以下服務(wù)器的注冊代碼全部可以在 doc/configs.md 中直接復(fù)制語言/場景服務(wù)器名稱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至此語言服務(wù)器注冊已覆蓋 30 種幾乎囊括主流編程語言。注冊代碼進階技巧1. 用 rootSearch 精確識別項目根目錄對 Haskell 等依賴項目結(jié)構(gòu)的語言指定根目錄標(biāo)記可讓服務(wù)器更快找到配置call LspAddServer([#{name: hls, \ filetype: [haskell, lhaskell], \ rootSearch: [*.cabal, stack.yaml, cabal.project, hie.yaml], \ path: haskell-language-server-wrapper, \ args: [--lsp] \ }])2. 用 LspOptionsSet 微調(diào)體驗注冊服務(wù)器后可通過LspOptionsSet()調(diào)整插件行為常用選項包括autoComplete自動補全、showInlayHints內(nèi)聯(lián)提示、highlightDiagInline行內(nèi)診斷高亮、hoverInPreview預(yù)覽窗口懸停等。完整選項列表見 doc/lsp.txt 的lsp-options章節(jié)。call LspOptionsSet(#{autoComplete: v:true, \ showInlayHints: v:true, \ snippetSupport: v:true \ })3. 一個文件類型掛多個服務(wù)器通過features字段可以為同一文件類型掛載多個服務(wù)器并各司其職比如 clangd 負(fù)責(zé)補全、cspell-lsp 負(fù)責(zé)拼寫檢查。常用 LSP 命令速查注冊完成并打開對應(yīng)語言的文件后以下命令立即可用命令定義見 plugin/lsp.vim命令功能:LspHover懸停查看類型與文檔:LspGotoDefinition/:LspGotoImpl跳轉(zhuǎn)定義 / 實現(xiàn):LspPeekReferences預(yù)覽窗口查看引用:LspRename全局重命名符號:LspFormat格式化代碼:LspDiag next/:LspDiag show診斷跳轉(zhuǎn) / 列表:LspDocumentSymbol/:LspOutline符號列表 / 大綱:LspCodeAction/:LspFixAll代碼操作 / 快速修復(fù):LspShowAllServers查看已注冊服務(wù)器:LspServer查看服務(wù)器狀態(tài)與日志常見問題排查注冊后無反應(yīng)先用:LspShowAllServers確認(rèn)服務(wù)器已注冊再用:LspServer查看日志path必須指向真實可執(zhí)行文件缺失時插件會提示 LSP server xxx is not found。補全不彈出檢查LspOptionsSet中autoComplete是否為v:trueCSS/HTML/JSON 服務(wù)器還需要開啟snippetSupport才能獲得補全。多語言項目混亂合理使用rootSearch和features字段讓每個服務(wù)器只管自己負(fù)責(zé)的文件類型。配置好這些語言服務(wù)器注冊代碼后你的 Vim 就擁有了媲美 IDE 的智能開發(fā)體驗。還想要更多語言歡迎補充到官方配置文檔讓這份全收錄更完整【免費下載鏈接】lspLanguage Server Protocol (LSP) plugin for Vim9項目地址: https://gitcode.com/gh_mirrors/lsp/lsp創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考