Skip to content

⚡ 快捷指令

✨ 什么是快捷指令?

快捷指令,是用户在编辑器中通过 输入或删除特定文本 自动触发的脚本。
通过它,你可以:

  • 将输入的内容自动转换(如 Markdown 转为富文本)
  • 定义个性化的模板输入(如快速插入常用语、格式化内容)
  • 实现「一键扩展输入体验」

🚀 使用方法

进入方式:

编辑器界面底部工具栏左侧菜单按钮打开底部设置面板辅助管理快捷指令


🔑 输入码

输入码就是「触发指令的文本」,可以配置多个。

示例:

  • Markdown 一级标题:
    输入码为 # # + 空格)
  • 插入书名格式:
    输入码为

⚙️ 触发方式

支持两种触发动作:

  1. 输入文本 → 当用户输入指定字符时触发
  2. 删除文本 → 当用户删除指定字符时触发

📦 脚本参数

当快捷指令触发时,脚本可获得当前光标上下文:

参数名说明
beforeString光标前的文本(当前段落范围内)
afterString光标后的文本(当前段落范围内)
commandText触发当前脚本的指令文本(输入或删除的内容)

📝 脚本说明

  • 脚本最后一行的返回值(可以来自 if/else 分支)
    → 会作为字符串插入光标位置。
  • 如果脚本最后没有返回值或为空 → 不会插入任何内容。

示例

js
if (commandText === '# ') {
  return '## {{}}'
}

当输入 # 时,自动替换为二级标题,并将光标定位到


🎯 光标定位

使用 {{}} 表示光标最终停留的位置,括号不会作为文本插入编辑器。

示例:

js
"《{{}}》"

当用户输入 时:

  1. 自动插入 《 》
  2. 光标定位到 {{}} 内部,方便继续输入
  3. 按下回车 → 光标跳转到 之后

注意

  • 输出值中可以包含多个 {{}}
  • 每次 回车 会跳转到下一个 {{}}
  • 如果已到最后一个,则光标跳转到文本末尾

🔌 编辑器 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() });
}