⚡ 快捷指令
✨ 什么是快捷指令?
快捷指令,是用户在编辑器中通过 输入或删除特定文本 自动触发的脚本。
通过它,你可以:
- 将输入的内容自动转换(如 Markdown 转为富文本)
- 定义个性化的模板输入(如快速插入常用语、格式化内容)
- 实现「一键扩展输入体验」
🚀 使用方法
进入方式:
编辑器界面 → 底部工具栏左侧菜单按钮 → 打开底部设置面板 → 辅助 → 管理快捷指令
🔑 输入码
输入码就是「触发指令的文本」,可以配置多个。
示例:
- Markdown 一级标题:
输入码为#(#+ 空格) - 插入书名格式:
输入码为《
⚙️ 触发方式
支持两种触发动作:
- 输入文本 → 当用户输入指定字符时触发
- 删除文本 → 当用户删除指定字符时触发
📦 脚本参数
当快捷指令触发时,脚本可获得当前光标上下文:
| 参数名 | 说明 |
|---|---|
beforeString | 光标前的文本(当前段落范围内) |
afterString | 光标后的文本(当前段落范围内) |
commandText | 触发当前脚本的指令文本(输入或删除的内容) |
📝 脚本说明
- 脚本最后一行的返回值(可以来自
if/else分支)
→ 会作为字符串插入光标位置。 - 如果脚本最后没有返回值或为空 → 不会插入任何内容。
示例
js
if (commandText === '# ') {
return '## {{}}'
}当输入 # 时,自动替换为二级标题,并将光标定位到 。
🎯 光标定位
使用 {{}} 表示光标最终停留的位置,括号不会作为文本插入编辑器。
示例:
js
"《{{}}》"当用户输入 《 时:
- 自动插入
《 》 - 光标定位到 {{}} 内部,方便继续输入
- 按下回车 → 光标跳转到
》之后
注意
- 输出值中可以包含多个 {{}}
- 每次 回车 会跳转到下一个 {{}}
- 如果已到最后一个,则光标跳转到文本末尾
🔌 编辑器 API
你可以在脚本中调用编辑器提供的 API 进行更多扩展。
示例:
javascript
// 删除位置10到20之间的文本
deleteText({ start: 10, end: 20 });
// 删除当前选中的文本
const start = getSelectionStart();
const end = getSelectionEnd();
deleteText({ start, end });replace(options)
替换指定范围的文本。
参数:
start(number): 替换开始位置end(number): 替换结束位置text(string): 新文本内容
示例:
javascript
// 将位置0到5的文本替换为"标题"
replace({ start: 0, end: 5, text: "标题" });
// 替换当前选中的文本
const start = getSelectionStart();
const end = getSelectionEnd();
replace({ start, end, text: "新内容" });选择操作
getSelectionStart()
获取当前选择的开始位置。
返回值:
number: 选择开始位置,如果编辑器不可用则返回-1
示例:
javascript
const startPos = getSelectionStart();
console.log(`选择开始于位置: ${startPos}`);getSelectionEnd()
获取当前选择的结束位置。
返回值:
number: 选择结束位置,如果编辑器不可用则返回-1
示例:
javascript
const endPos = getSelectionEnd();
console.log(`选择结束于位置: ${endPos}`);
// 获取选中文本的长度
const selectionLength = getSelectionEnd() - getSelectionStart();文本获取
getText()
获取编辑器中的所有纯文本内容。
返回值:
string: 编辑器的纯文本内容,如果编辑器不可用则返回空字符串
示例:
javascript
const content = getText();
console.log(`文档内容: ${content}`);
// 统计字符数
const charCount = getText().length;
console.log(`字符数: ${charCount}`);段落操作
getParagraphAttributes()
获取当前段落的属性。
返回值:
object: 段落属性对象,如果编辑器不可用则返回空对象
示例:
javascript
const attrs = getParagraphAttributes();
console.log('当前段落属性:', attrs);
// 检查是否为标题
if (attrs.heading) {
console.log(`这是${attrs.heading}级标题`);
}setParagraphAttributes(options)
设置当前段落的属性。
参数:
attributes(object): 要设置的段落属性
示例:
javascript
// 设置为一级标题
setParagraphAttributes({
attributes: { heading: 1 }
});
// 设置为引用块
setParagraphAttributes({
attributes: { blockquote: true }
});
// 设置文本对齐方式
setParagraphAttributes({
attributes: { textAlign: 'center' }
});位置检测
isAtParagraphStart()
检查光标是否位于段落开始处。
返回值:
boolean: 如果在段落开始处返回true,否则返回false
示例:
javascript
if (isAtParagraphStart()) {
console.log('光标在段落开头');
// 可以插入段落级别的格式
setParagraphAttributes({ attributes: { heading: 1 } });
}isAtParagraphEnd()
检查光标是否位于段落结束处。
返回值:
boolean: 如果在段落结束处返回true,否则返回false
示例:
javascript
if (isAtParagraphEnd()) {
console.log('光标在段落末尾');
// 可以添加新段落
insertText({ offset: getSelectionEnd() });
}