Neovim配色方案语法高亮覆写问题:Ruby实例变量不生效
解决Neovim中Ruby实例变量(rubyInstanceVariable)高亮覆写无效的问题
先确认语法组的真实名称
不同语法解析器(内置Ruby语法/ nvim-treesitter)使用的高亮组名称可能不同。打开任意Ruby文件,将光标移到实例变量(如@foo)上,执行以下命令查看当前光标位置对应的高亮组::echo synIDattr(synID(line('.'), col('.'), 1), 'name')如果是nvim-treesitter解析,返回的组名可能是
@variable.instance.ruby而非rubyInstanceVariable,这时候要对应修改你的设置。调整高亮设置的执行时机
语法组是在文件类型加载后才被定义的,如果你的colors.lua代码执行过早(比如Vim初始化阶段),此时rubyInstanceVariable还未创建,设置自然无效。可以通过文件类型事件回调延迟执行:-- 针对内置Ruby语法的设置 vim.api.nvim_create_autocmd("FileType", { pattern = "ruby", callback = function() vim.api.nvim_set_hl(0, "rubyInstanceVariable", { fg = "#ff4500" }) -- 替换为你需要的颜色值 end, }) -- 如果使用nvim-treesitter,替换为treesitter的组名 vim.api.nvim_create_autocmd("FileType", { pattern = "ruby", callback = function() vim.api.nvim_set_hl(0, "@variable.instance.ruby", { fg = "#ff4500" }) end, })避免被其他插件/主题覆盖
部分颜色主题或Ruby相关插件会在加载后重新设置高亮,覆盖你的自定义规则。可以将设置放在主题加载完成后执行:vim.api.nvim_create_autocmd("ColorScheme", { pattern = "*", callback = function() vim.api.nvim_set_hl(0, "rubyInstanceVariable", { fg = "#ff4500" }) end, })验证当前使用的语法解析器
执行:echo b:current_syntax查看当前Ruby文件使用的语法引擎,如果返回ruby则是内置语法;如果是treesitter驱动,会显示ruby但实际依赖treesitter的高亮规则,此时必须用treesitter对应的组名设置。
内容的提问来源于stack exchange,提问作者Ilya Cherevkov
相关产品推荐
相关产品推荐

