Loading...
功能特性
- 块级元素的Markdown风格快捷方式(如
#
转换为H1,>
转换为引用块) - 行内标记格式化(如
**粗体**
,*斜体*
,~~删除线~~
) - 智能标点转换(如
--
转为—
,...
转为…
) - 数学符号和分数
- 法律符号和箭头
- 支持通过删除操作撤销自动格式化
套件使用
安装
最快捷的添加自动格式化方式是使用AutoformatKit
,它包含了全面的块级、标记级和文本替换的格式化规则。
添加套件
import { createPlateEditor } from 'platejs/react';
import { AutoformatKit } from '@/components/editor/plugins/autoformat-kit';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
...AutoformatKit,
],
});
手动配置
安装
pnpm add @platejs/autoformat
添加插件
import { AutoformatPlugin } from '@platejs/autoformat';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...其他插件,
AutoformatPlugin,
],
});
配置插件
自定义自动格式化规则:
import { AutoformatPlugin } from '@platejs/autoformat';
AutoformatPlugin.configure({
options: {
rules: [
// 块级规则
{
match: '# ',
mode: 'block',
type: 'h1',
},
{
match: '> ',
mode: 'block',
type: 'blockquote',
},
// 标记规则
{
match: '**',
mode: 'mark',
type: 'bold',
},
{
match: '*',
mode: 'mark',
type: 'italic',
},
],
enableUndoOnDelete: true,
},
});
高级配置
导入预定义的规则集实现全面自动格式化:
import { AutoformatPlugin } from '@platejs/autoformat';
import {
autoformatArrow,
autoformatLegal,
autoformatMath,
autoformatPunctuation,
autoformatSmartQuotes,
} from '@platejs/autoformat';
AutoformatPlugin.configure({
options: {
enableUndoOnDelete: true,
rules: [
// 自定义块级规则
{
match: '# ',
mode: 'block',
type: 'h1',
},
// 预定义规则集
...autoformatSmartQuotes,
...autoformatPunctuation,
...autoformatArrow,
...autoformatLegal,
...autoformatMath,
].map((rule) => ({
...rule,
// 在代码块中禁用自动格式化
query: (editor) =>
!editor.api.some({
match: { type: 'code_block' },
}),
})),
},
});
rules
: 定义触发条件和格式化操作的规则数组enableUndoOnDelete
: 允许通过退格键撤销自动格式化query
: 根据上下文条件启用/禁用规则的函数
使用正则表达式
对于更复杂的匹配模式,可以使用正则表达式:
import { AutoformatPlugin } from '@platejs/autoformat';
import { toggleList } from '@platejs/list';
AutoformatPlugin.configure({
options: {
rules: [
{
match: [String.raw`^\d+\.$ `, String.raw`^\d+\)$ `],
matchByRegex: true,
mode: 'block',
type: 'list',
format: (editor, { matchString }) => {
const number = Number(matchString.match(/\d+/)?.[0]) || 1;
toggleList(editor, {
listRestartPolite: number,
listStyleType: 'ol',
});
},
},
],
},
});
matchByRegex
: 启用正则模式匹配(替代字符串完全匹配)- 注意:正则模式仅适用于
mode: 'block'
且只在块起始位置生效(triggerAtBlockStart: true
)
插件
AutoformatPlugin
基于输入模式实现文本自动格式化的插件。
预定义规则集
可导入以下预定义规则集:
名称 | 描述 |
---|---|
autoformatSmartQuotes | 转换"文本" 为"文本" |
转换'文本' 为'文本' | |
autoformatPunctuation | 转换-- 为— |
转换... 为… | |
转换>> 为» | |
转换<< 为« | |
autoformatArrow | 转换-> 为→ |
转换<- 为← | |
转换=> 为⇒ | |
转换<= 和≤= 为⇐ | |
autoformatLegal | 转换(tm) 和(TM) 为™ |
转换(r) 和(R) 为® | |
转换(c) 和(C) 为© | |
autoformatLegalHtml | 转换™ 为™ |
转换® 为® | |
转换© 为© | |
转换§ 为§ | |
autoformatComparison | 转换!> 为≯ |
转换!< 为≮ | |
转换>= 为≥ | |
转换<= 为≤ | |
转换!>= 为≱ | |
转换!<= 为≰ | |
autoformatEquality | 转换!= 为≠ |
转换== 为≡ | |
转换!== 和≠= 为≢ | |
转换~= 为≈ | |
转换!~= 为≉ | |
autoformatFraction | 转换1/2 为½ |
转换1/3 为⅓ | |
... | |
转换7/8 为⅞ | |
autoformatDivision | 转换// 为÷ |
autoformatOperation | 转换+- 为± |
转换%% 为‰ | |
转换%%% 和‰% 为‱ | |
包含autoformatDivision 规则 | |
autoformatSubscriptNumbers | 转换~0 为₀ |
转换~1 为₁ | |
... | |
转换~9 为₉ | |
autoformatSubscriptSymbols | 转换~+ 为₊ |
转换~- 为₋ | |
autoformatSuperscriptNumbers | 转换^0 为⁰ |
转换^1 为¹ | |
... | |
转换^9 为⁹ | |
autoformatSuperscriptSymbols | 转换^+ 为⁺ |
转换^- 为⁻ | |
autoformatMath | 包含autoformatComparison 规则 |
autoformatEquality 规则 | |
autoformatOperation 规则 | |
autoformatFraction 规则 | |
autoformatSubscriptNumbers 规则 | |
autoformatSubscriptSymbols 规则 | |
autoformatSuperscriptNumbers 规则 | |
autoformatSuperscriptSymbols 规则 |
类型定义
AutoformatCommonRule
自动格式化规则的通用接口结构,与模式无关。
match string | string[] | MatchRange | MatchRange[]
当触发字符和光标前的文本匹配时应用规则。
- 对于
mode: 'block'
: 在光标前查找结束匹配项 - 对于
mode: 'text'
: 在光标前查找结束匹配项。如果format
是数组,还需查找起始匹配项 - 对于
mode: 'mark'
: 查找起始和结束匹配项 - 注意:
'_*'
、['_*']
和{ start: '_*', end: '*_' }
等效 MatchRange
:
- 对于
trigger optional string | string[]
触发自动格式化的字符
insertTrigger optional boolean
为true时,在自动格式化后插入触发字符
- 默认值:
false
- 默认值:
query optional (editor: PlateEditor, options: AutoformatQueryOptions) => boolean
AutoformatBlockRule
块级模式自动格式化规则接口。
mode 'block'
块级模式:设置块类型或自定义格式
match string | string[]
自动格式化规则的匹配模式
type optional string
对于
mode: 'block'
:设置块类型。如果定义了format
,则忽略此字段triggerAtBlockStart optional boolean
是否仅在块起始位置触发
- 默认值:
true
- 默认值:
allowSameTypeAbove optional boolean
是否允许上方存在相同块类型时触发
- 默认值:
false
- 默认值:
preFormat optional (editor: PlateEditor) => void
在
format
前调用的函数。用于重置选中块format optional (editor: PlateEditor) => void
自定义格式化函数
AutoformatMarkRule
标记模式自动格式化规则接口。
AutoformatTextRule
文本模式自动格式化规则接口。