Typora插件中文标点符号自动补全功能实现思路
在Typora插件开发中,中文标点符号的自动补全是一个常见的需求。本文介绍了一种通过自定义快捷键实现中文标点符号自动补全的技术方案。
需求背景
许多中文用户在编辑文档时,经常需要为选中的文本添加中文标点符号,如引号(")、书名号(《》)或括号(())。传统的手动输入方式效率较低,特别是在需要频繁操作时。
技术实现方案
Typora插件提供了强大的自定义功能,我们可以通过编写JavaScript代码并绑定快捷键来实现这一功能。以下是实现中文引号自动补全的核心代码:
() => {
const {node, bookmark, range} = this.utils.getRangy();
const ele = File.editor.findElemById(node.cid);
const rangyText = ele.rawText().substring(bookmark.start, bookmark.end);
if (rangyText !== "") {
const insertText = "“" + rangyText + "”";
File.editor.UserOp.pasteHandler(File.editor, insertText, true, true, true);
File.editor.undo.addSnap(node.cid, File.editor.undo.UndoManager.SnapFlag.REPLACE);
setTimeout(() => {
const {range, bookmark} = this.utils.getRangy();
bookmark.start -= insertText.length - 1;
bookmark.end -= 1
range.moveToBookmark(bookmark);
range.select();
});
}
}
代码解析
- 获取选中文本:通过
getRangy()方法获取当前选中的文本范围及相关信息 - 文本处理:当检测到有选中文本时,在文本前后添加中文引号
- 插入处理:使用
pasteHandler方法替换原有选中文本 - 撤销支持:添加撤销快照,支持Ctrl+Z操作
- 光标定位:使用setTimeout确保操作完成后重新定位光标位置
扩展应用
此方案可以轻松扩展支持其他中文标点符号:
- 书名号:将代码中的引号替换为《》
- 括号:替换为()
- 组合符号:可以创建多个快捷键绑定不同的符号组合
配置方法
在hotkey.user.toml配置文件中添加以下内容:
[wrapQuotationMarks]
desc = "包裹引号"
enable = true
hotkey = "ctrl+alt+e"
evil = """
[上述JavaScript代码]
"""
优化建议
- 智能判断:可以增加逻辑判断选中文本是否已包含标点符号
- 多符号支持:创建多个快捷键配置支持不同符号
- 用户配置:允许用户自定义需要添加的符号对
这种实现方式不仅提高了中文文档编辑的效率,也展示了Typora插件强大的自定义能力,开发者可以根据实际需求进行灵活调整和扩展。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



