
lsp.vim 语义高亮与 Inlay Hints让代码着色和提示更智能【免费下载链接】lspLanguage Server Protocol (LSP) plugin for Vim9项目地址: https://gitcode.com/gh_mirrors/lsp/lsplsp.vim 是一款用 Vim9 script 编写的 Language Server Protocol (LSP) 插件专为 Vim 9.0 及以上版本打造。今天要重点介绍它的两大智能特性语义高亮Semantic Highlighting与Inlay Hints内联提示。语义高亮让代码着色不再是简单的关键词匹配而是由语言服务器理解代码含义后精准着色Inlay Hints 则在代码行内直接显示推断类型与参数名。本文将用最短配置带你体验这两种功能让 Vim 的代码着色和提示更智能。什么是语义高亮为什么比传统语法着色更聪明传统的语法着色syntax highlighting靠正则规则匹配文本经常出现同名不同义的尴尬一个叫name的类、函数、参数可能被染成同一种颜色。而LSP 语义高亮通过语言服务器返回的semantic tokens能精确区分 class、function、parameter、enum member 等 token 类型即使它们文本相同也能正确着色。更妙的是lsp.vim 的语义高亮会与现有语法高亮叠加combine是对原有配色的精细化增强而不是粗暴替换。整个逻辑实现在 autoload/lsp/semantichighlight.vim 中内置了 23 种 token 类型到高亮组的映射。语义类型默认高亮组class / struct / enumLspSemanticClass→ Typefunction / methodLspSemanticFunction→ Functionparameter / variableLspSemanticParameter→ IdentifierenumMemberLspSemanticEnumMember→ Constantdecorator / macroLspSemanticDecorator→ Macrolsp.vim 语义高亮快速启用指南 ⚡一行配置开启语义高亮在.vimrc中用LspOptionsSet()设置即可call LspOptionsSet(#{semanticHighlight: v:true})默认semanticHighlight为false开启后插件会自动向声明支持 semantic tokens 的语言服务器请求数据并在文本变更后刷新。刷新有一个防抖延迟参数semanticHighlightDelay默认 1000ms快速编辑时能避免向服务器发送过多请求追求即时反馈可调低例如semanticHighlightDelay: 300。如何自定义语义高亮颜色所有高亮组都以LspSemantic开头可在配色方案里覆盖例如highlight LspSemanticClass guifg#61afef highlight LspSemanticParameter guifg#e5c07b关于每个高亮组对应的 token 类型可查阅 doc/lsp.txt 中lsp-semantic-highlighting一节。Inlay Hints 内联提示让类型和参数一目了然 Inlay Hints是近年 IDE 很流行的功能在代码行内以虚拟文本virtual text显示推断的类型和参数名标签无需悬停鼠标就能读懂代码。lsp.vim 支持两类 hintLspInlayHintsType显示推断的类型注解LspInlayHintsParam显示参数名标签实现位于 autoload/lsp/inlayhints.vim采用 300ms 定时器节流更新且仅在普通模式下显示插入模式不会干扰输入。一行配置开启 Inlay Hintscall LspOptionsSet(#{showInlayHints: v:true})同样默认关闭开启后光标静止时CursorHold即触发更新。注意 Inlay Hints 需要Vim 9.0.0178 及以上版本。用命令随时开关 Inlay Hints无需改配置也能临时开关:LspInlayHints enable :LspInlayHints disable :LspInlayHints toggle不同语言服务器的 Inlay Hints 配置技巧 ️开启插件侧的showInlayHints只是第一步部分语言服务器还需要单独打开自己的 hint 开关参考 doc/configs.md。Gogoplscall LspAddServer([#{name: golang, filetype: [go], \ path: /usr/local/bin/gopls, args: [serve], \ workspaceConfig: #{ \ gopls: #{ \ hints: #{ \ assignVariableTypes: v:true, \ parameterNames: v:true, \ constantValues: v:true \ } \ } \ } \ }])Rustrust-analyzercall LspAddServer([#{name: rustanalyzer, filetype: [rust], \ path: /usr/local/bin/rust-analyzer, args: [], \ syncInit: v:true, \ initializationOptions: #{ \ inlayHints: #{ \ typeHints: #{enable: v:true}, \ parameterHints: #{enable: v:true} \ } \ } \ }])另外 C/C 的 clangd 也有专门的 inlay hints 支持路径isClangdInlayHintsProvider插件会自动识别。常见问题 FAQ ❓Q语义高亮开启后没效果检查语言服务器是否支持 semantic tokens 能力以及是否已正确注册服务器LspShowAllServers可查看。QInlay Hints 显示不出来先确认 Vim 版本 ≥ 9.0.0178再确认服务器侧 hint 已开启如 gopls 的 hints 配置。Q两者可以同时开启吗可以。语义高亮管颜色Inlay Hints 管注释互不干扰配合使用体验最佳。总结 lsp.vim 的语义高亮让代码着色从看文本升级为懂代码Inlay Hints则把类型和参数信息直接写进行内。两个特性都只需一行配置即可体验配合 gopls、rust-analyzer、clangd 等主流服务器开箱即用。想亲手尝试可通过git clone https://gitcode.com/gh_mirrors/lsp/lsp安装插件然后在.vimrc中加上packadd lsp即可开始你的智能 Vim 之旅【免费下载链接】lspLanguage Server Protocol (LSP) plugin for Vim9项目地址: https://gitcode.com/gh_mirrors/lsp/lsp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考