编辑器扩展
Obsidian 的编辑器基于 CodeMirror 6(CM6)。通过编辑器扩展(Extension)可以定制语法高亮、输入行为与装饰。
核心要点
理解扩展点
- 用
editorExtension.register注册 CM6Extension:
ts
import { EditorView } from "@codemirror/view";
this.registerEditorExtension(
EditorView.lineWrapping
);- 常见扩展类型:StateField(状态)、ViewPlugin(DOM 装饰)、Keymap(快捷键)、Facet(配置)
典型场景
- 装饰:高亮特定语法或行内标签(如
==高亮==的实时渲染) - 快捷键:绑定命令到编辑器上下文(
EditorView.domEventHandlers) - 补全:注册
CompletionSource做自定义自动补全
注意事项
- CM6 是「不可变状态」模型,扩展通过
updateListener响应变更而非直接改 DOM - 复杂装饰用
Decoration+ViewPlugin,避免频繁重排 - 参考 CSS 变量手册 让装饰颜色随主题切换