Riot.js文件白底黑字是因Sublime Text不识别.tag扩展名,需安装riot-sublime插件并手动绑定语法;脚本块type属性非"javascript"会导致高亮失效,需配置javascript_types;补全仅靠代码片段,<yield>/<slot>作用域高亮受限于语法定义。

为什么Riot.js文件全是白底黑字?
因为Sublime Text原生不识别.tag扩展名,也不加载Riot语法定义——它默认把App.tag当纯文本处理,连<script>块里的const都不会着色。这不是你代码写错了,是Sublime压根没启动任何语法解析。
必须装riot-sublime插件并手动绑定.tag后缀
别搜“Riot”或“RiotJS”——那些老插件已停更,在Sublime Text 4下常导致标签错位、{ }不着色甚至崩溃。唯一可靠的是作者为riot的riot-sublime(GitHub仓库riot/riot-sublime):
- Ctrl+Shift+P →
Package Control: Install Package→ 搜riot-sublime,认准作者栏显示riot - 装完后,进
Preferences → Browse Packages,确认文件夹名是riot-sublime(不是Riot或riotjs) - 打开任意
.tag文件,右下角点击当前语法名 →Open all with current extension as…→Riot → Riot - 若想永久生效,打开该
.tag文件 →Preferences → Settings – Syntax Specific→ 右侧加:"syntax": "Packages/riot-sublime/Riot.sublime-syntax"(路径大小写必须完全一致)
{this.name}还是灰的?检查是否混用了<script>语言标记
Riot支持在<script>里声明type,比如<script type="es6">或<script type="typescript">。但riot-sublime默认只解析type="javascript"或无type的脚本块。如果写了type="ts",里面的interface和const会变灰——这不是高亮失败,是插件故意跳过。
- 临时解决:删掉
type属性,或改成type="javascript" - 长期方案:进
Preferences → Package Settings → riot-sublime → Settings,加一行:"javascript_types": ["javascript", "es6", "ts", "typescript"] - 注意:改完设置后需重启Sublime,否则新类型不生效
补全和跳转别强求,能用代码片段就不错
Sublime不解析Riot组件的props或this.opts结构,也不会索引<my-tag>自定义元素。所谓“提示”,实际只有两种可用路径:
- 装
Riot Snippets插件:输入riot:component+ Tab生成完整<my-tag>骨架,riot:script+ Tab插入带this.on('mount', ...)的脚本块 - 手动建
.sublime-snippet:比如把<div class="{opts.className}">存成 snippet,避免每次手敲{opts.漏掉点 - 别试
SublimeCodeIntel或EasyClangComplete——它们对Riot的AST支持为零,常卡死或报undefined scope
真正容易被忽略的是:Riot模板里<yield>和<slot>的嵌套作用域,riot-sublime目前不区分它们的scope,所以高亮颜色和普通HTML标签一样。这不是配置问题,是语法定义本身的限制。


















