Neovim跨语言代码补全异常求助:标签内未触发对应语言提示
解决Neovim跨嵌入式语言补全问题
一、修复HTML文件中<script>/<style>标签内的补全问题
html-lsp默认未启用嵌入式JS/CSS的LSP联动,需在配置中开启支持:
在你的LSP配置文件(如init.lua)中,修改html-lsp的setup代码:
require('lspconfig').html.setup({ init_options = { embeddedLanguages = { css = true, javascript = true } }, -- 保留你已有的on_attach、capabilities等配置 })
配置后,html-lsp会在<script>/<style>标签内自动调用对应JS/TS、CSS的LSP提供补全,确保tsserver(或eslint)和cssls已正确安装并配置。
二、解决JS/TS中编写HTML/CSS的补全问题
1. JSX/TSX场景
tsserver默认支持JSX的HTML补全,但需确保文件类型被正确识别。若未自动识别,添加以下自动命令:
autocmd BufNewFile,BufRead *.jsx set filetype=javascriptreact autocmd BufNewFile,BufRead *.tsx set filetype=typescriptreact
2. 普通模板字符串场景
借助nvim-treesitter的语言注入功能,让Neovim识别模板字符串内的语言:
- 安装
html、css语法解析器:
:TSInstall html css
- 启用treesitter语言注入:
require('nvim-treesitter.configs').setup({ injections = { enable = true } })
同时,给tsserver添加模板字符串补全支持:
require('lspconfig').tsserver.setup({ init_options = { preferences = { includeCompletionsForModuleExports = true } } })
三、验证与排查
- 用
:LspInfo检查html、tsserver、cssls是否处于运行状态; - 确保
nvim-cmp已配置nvim_lsp作为补全来源:
require('cmp').setup({ sources = { { name = 'nvim_lsp' } } })
- 重启Neovim后测试补全效果。
内容的提问来源于stack exchange,提问作者Newson
相关产品推荐
相关产品推荐

