程序员的喵

Obsidian 插件开发

2021-12-02

昨天花了点时间下学习 Obsidian 的插件开发。我想了一下目前自己有点不爽的是图片插入的时候,图片的名称中间有空格,这虽然也不是什么大问题,只是在 Linux 环境下显示的时候看起来特别别扭。而且这看起来也是一个很好的入门小插件,可以接触 Obsidian 里面的文件管理和编辑操作,我需要把图片在文件系统里的名称改掉,也要修改 markdown 里的路径。

所有代码都在这里了: chenyukang/obsidian-rename-image (github.com)

开发步骤

  1. 从 plugin sample repo 克隆一个仓库
  2. 修改其中的 manifest.json 文件,其中 plugin id 是最重要的。
  3. 修改主文件 main.ts,使用 npm install 安装依赖库
  4. 使用命令 npm run dev 编译出 main.js
  5. 在 Obsidian 的 vault 目录 .obsidian/plugins/ 创建一个插件名称的文件夹,拷贝 manifest.json 和 main.js 到该目录,有的插件可能还有 style.css 等文件。
  6. 在 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 的相关文档可太丰富了。

所以,真没必要抱着上古时代的软件不放 😁

公号同步更新,欢迎关注👻