Obsidian 插件延迟启动

首先,下载Templater 插件,新建md文件,粘贴如下代码:

<% Object.values(app.plugins.manifests).map(p=>p.id).sort((a,b)=>a.localeCompare(b)).join('\n') %>

Ctrl+P,输入 Templater:Replace templates in the active file

然后可以看见md 文件中出现了你的插件列表,里面有所有你已经安装的插件,这里的名字和OB 插件管理中的名字可能不同。

第二步,将你不想OB启动时一起启动的插件选出来,新建一个md 文件,可以命名为 startDelay.md,将上一步得到的插件名填入其中。

然后再建立一个md 文件,命名为script.md 将下述代码粘贴其中:

<%*

fastStart = async (filename, delayInSecond) => {

if (tp.file.exists(filename)) {

const f = tp.file.find_tfile(filename);

let plugins = (await app.vault.read(f)).split(/\r?\n/);

setTimeout(async () => {

plugins.forEach(async (p) => await app.plugins.enablePlugin(p))

}, delayInSecond * 1000)

}

}

await fastStart("startDelay", 30)

%>

第三步,将上述两个文件,startDelay.md 和 script.md 扔到一个文件夹,这里将其命名为template,在OB 中打开Templater 插件的设置选项,将 Template folder location 设置为template 所在的路径。

然后将在Startup Templates 选项新增script.md。

第四步,进入OB 选项>第三方插件页面,然后把你刚刚写入startDelay.md 中的插件全部关闭。

最后,关闭OB 再打开,你没有加入startDelay.md 中的插件会立刻启动,加入其中的插件会30s 后再启动。

简单说一下这个方法的原理,即使用插件Template 的Startup Templates 功能,这个功能可以在OB 启动时加载设定好的模板,这里便是script.md,而我们写入script.md 中代码的则可以在30s后启动写在startDelay.md 中插件。

我们在OB 的第三方插件中把startDelay.md 中把不想立刻启动的插件关掉,然后以后在OB 启动时Templater 就会调用的脚本再在30s启动这些插件,所以别把Templater 给关了,指望着人家干活呢。

像pandoc 这样的软件,可能从打开OB 到结束都用不到,就请它30s 后再启动,不要占用开机速度。

参考文献(科学上网):Improve Obsidian Startup Time on Older Devices with the FastStart Script | by TfTHacker | Medium

1 个赞

不知道现在有没有实现该功能的插件?我觉得完全可以写一个插件来完成这件事,还能提供更方便的管理功能

有人按照那篇文章的思路做了一个插件:

2 个赞

我觉得这个需求适合加入核心功能 :joy:

如果官方能做就挺好的

试了一下挺好用的, 赞