昨天花了点时间下学习 Obsidian 的插件开发。我想了一下目前自己有点不爽的是图片插入的时候,图片的名称中间有空格,这虽然也不是什么大问题,只是在 Linux 环境下显示的时候看起来特别别扭。而且这看起来也是一个很好的入门小插件,可以接触 Obsidian 里面的文件管理和编辑操作,我需要把图片在文件系统里的名称改掉,也要修改 markdown 里的路径。
所有代码都在这里了: chenyukang/obsidian-rename-image (github.com)。
开发步骤
- 从 plugin sample repo 克隆一个仓库
- 修改其中的 manifest.json 文件,其中 plugin id 是最重要的。
- 修改主文件 main.ts,使用
npm install
安装依赖库 - 使用命令
npm run dev
编译出 main.js - 在 Obsidian 的 vault 目录 .obsidian/plugins/ 创建一个插件名称的文件夹,拷贝 manifest.json 和 main.js 到该目录,有的插件可能还有 style.css 等文件。
- 在 settings 页面加载插件
在开发过程中,可以通过 Ctrl-Shift-i
来打开调试页面,在代码中加入调试信息。
API 相关
在插件项目里执行了 npm install
之后,文件 node_modules/obsidian/obsidian.d.ts
就是 Obsidian 的 API,里面有很详细的注释。
作为补充可以看看 Obsidian API - Liam Cain。API 分为这几个主要部分。
其中文件编辑部分使用了这个CodeMirror。
其他
之前有那么一会我会想,Obsidian 这样一个软件为什么不开源?如果开源我们是不是可以做更多的自由探索。通过折腾插件这么一段体验,我认为不开源问题也不大,其实通过插件我们其实可以在插件里面跑任何自己的代码。这里面的可扩展性对于绝大部分用户来说绰绰有余。
一个技巧是多看看已有的插件是如何实现的。打开 Settings 页面的 community plugins,选择某个感兴趣的插件看看里面的代码:
Obsidian 模块化做得很好,而且 API 的粒度很细。在 VsCode 中写 TypeScript 插件体验比在 Emacs 中写 elisp 开发插件好很多,并且 JavaScript 的相关文档可太丰富了。
所以,真没必要抱着上古时代的软件不放 😁
