NeoVim中lua << EOF heredoc后语法高亮异常求助
NeoVim中init.vim内Lua heredoc语法高亮异常问题
问题表现
- 配对圆括号颜色不一致
- 使用
lua << EOF开启Lua代码块后,后续的EOF无法终止Lua语法上下文,所有后续行都保持Lua语法高亮
已做排查
- 配置代码可正常加载运行,无任何报错或警告,仅存在语法高亮显示问题
- 未安装新插件的情况下突然出现该问题
- 更换默认配色方案、禁用
coc-vimlsp插件后问题依然存在 - 测试发现若heredoc块内没有圆括号
(),高亮可恢复正常,推测是Lua语法解析器误判圆括号未闭合,导致高亮异常延续
环境信息
- 操作系统:MacOS Monterey 12.4
- NeoVim版本:
NVIM v0.8.0 Build type: Release LuaJIT 2.1.0-beta3 Compiled by brew@Monterey Features: +acl +iconv +tui
完整init.vim配置
" 缩进设置 set shiftwidth=4 set ai set si " 显示行号 set nu " 在屏幕右下角显示命令 set sc " 限制弹窗显示的条目数量 set ph=20 " 设置光标下方最小行数 set so=15 " 禁用自动插入注释 au Filetype * setlocal fo-=c fo-=o fo-=r " vim-plug 配置 call plug#begin() " 主题 Plug 'catppuccin/nvim', {'as': 'catppuccin'} Plug 'tiagovla/tokyodark.nvim' " 图标支持 Plug 'ryanoasis/vim-devicons' " 状态栏 Plug 'nvim-lualine/lualine.nvim' " Fish 支持 Plug 'dag/vim-fish' " Markdown 支持 Plug 'preservim/vim-markdown' " Markdown 预览 Plug 'iamcco/markdown-preview.nvim', { 'for': ['markdown', 'vim-plug'] } " TeX 支持 Plug 'lervag/vimtex' " 自动闭合XML类标签 Plug 'alvan/vim-closetag' " 自动闭合括号 Plug 'jiangmiao/auto-pairs' " CoC 补全引擎 Plug 'neoclide/coc.nvim', { 'branch': 'release' } call plug#end() " catppuccin 配置 let g:catppuccin_flavour = "mocha" " latte, frappe, macchiato, mocha lua << EOF require("catppuccin").setup() EOF " 设置配色方案 colorscheme catppuccin " lualine 配置 lua << EOF require('lualine').setup({ options = { theme = "horizon" } }) EOF " vim-markdown 配置 let g:tex_conceal = "" let g:vim_markdown_math = 1 let g:vim_markdown_folding_disabled = 1 let g:vim_markdown_frontmatter = 1 let g:vim_markdown_new_list_item_indent = 0 " 为Markdown文件启用vimtex " 不够理想,因为这会启用vimtex的所有功能 au Filetype md,markdown call vimtex#init() " VimTeX 配置 let g:vimtex_compiler_latexmk = {'continuous': 0} " CoC 配置 exe 'so ~/.config/nvim/coc_config.vim'
解决建议
临时修复:强制重新解析语法
在打开init.vim时执行:syntax sync fromstart命令,强制NeoVim重新加载语法规则,可临时修复当前缓冲区的高亮异常。规避写法:替换heredoc为外部Lua文件
将Lua配置代码移到单独的Lua文件中,通过require加载,彻底避免heredoc的语法解析问题:
- 新建目录
~/.config/nvim/lua/config - 创建
~/.config/nvim/lua/config/catppuccin.lua,写入:require("catppuccin").setup() - 创建
~/.config/nvim/lua/config/lualine.lua,写入:require('lualine').setup({ options = { theme = "horizon" } }) - 在
init.vim中替换原heredoc块为:require("config.catppuccin") require("config.lualine")
根本修复:升级NeoVim版本
当前使用的v0.8.0存在已知的Lua heredoc语法高亮bug,升级到v0.9及以上版本可彻底解决该问题,可通过Homebrew执行brew upgrade neovim完成升级。排查插件干扰:禁用自动配对插件
临时禁用jiangmiao/auto-pairs插件,检查是否是该插件的括号自动配对逻辑干扰了语法解析器对括号闭合状态的判断。
内容的提问来源于stack exchange,提问作者user13002788
相关产品推荐
相关产品推荐

