如何在VS Code的Jupyter笔记本中启用自定义YAML魔法的语法高亮?
在VS Code Jupyter笔记本中启用YAML单元格语言选项的解决方案
问题描述
我在VS Code的Jupyter笔记本中使用自定义魔法命令,通过Python解释器运行不同语言的单元格。针对DuckDB的SQL,用%%duck_magic开头后,可在右下角单元格语言下拉选择"SQL",但自定义的%%yaml_magic对应的"YAML"选项并未出现在下拉列表中。
环境信息
- VS Code版本:1.92.0
- Microsoft Jupyter扩展版本:v2023.11.1100101639
- Red Hat YAML扩展版本:v1.15.0
- Python版本:3.10.11
复现步骤
- 在VS Code中新建Jupyter笔记本
- 添加含
%%yaml_magic的单元格(或空单元格) - 点击右下角「选择单元格语言模式」下拉菜单
- 发现"YAML"不在列表中,但"SQL"等其他非Python语言可选
已尝试方案
- 临时替代方案:复制YAML语法高亮规则,修改
tmLanguage.json覆盖Ruby语言扩展,选择Ruby可获得类YAML语法,但存在缩进问题,属于临时方案 - 重载测试:执行「Developer: Reload Window」时,下拉菜单短暂显示YAML等语言选项,但重载完成后消失
解决方案
1. 配置VS Code支持YAML笔记本语言
打开VS Code设置(快捷键Ctrl+,/Cmd+,),搜索notebook.supportedLanguages,点击「编辑 in settings.json」,将yaml添加到支持列表中:
"notebook.supportedLanguages": [ "yaml", "python", "sql", // 保留其他你需要的语言 ]
保存配置后执行「Developer: Reload Window」,YAML选项会出现在单元格语言下拉列表中。
2. 为自定义魔法关联YAML语言
在你的自定义魔法代码中,明确关联YAML语言类型,让VS Code自动识别:
from IPython.core.magic import register_cell_magic import yaml @register_cell_magic def yaml_magic(line, cell): # 处理YAML内容的逻辑 try: data = yaml.safe_load(cell) print("解析后的YAML数据:", data) return data except yaml.YAMLError as e: print(f"YAML解析错误:{e}") # 加载扩展时关联语言 def load_ipython_extension(ipython): ipython.register_magic_function(yaml_magic, 'cell') # 为魔法单元格指定YAML语言格式 ipython.display_formatter.formatters['text/yaml'].enabled = True
将这段代码保存为.py文件,在Jupyter笔记本中通过%load_ext 文件名加载后,使用%%yaml_magic的单元格会自动应用YAML语法高亮,同时YAML选项也会出现在语言下拉中。
3. 排查扩展兼容性
- 确保Red Hat YAML扩展已激活,暂时禁用其他无关扩展,重新加载窗口测试
- 更新Microsoft Jupyter扩展到最新版本,或回退到稳定版本(比如v2023.10.x),排查版本冲突问题
内容的提问来源于stack exchange,提问作者snowguy
相关产品推荐
相关产品推荐

