Markdown 是基于纯文本的语言,优点是轻量易写,但因此,附件通常是独立存储的。你可以自由地安置附件,但缺乏适当的组织也可能导致混乱。
这时你可能又怀念起 Word、PPT 等应用程序,因为它们将所有内容包含在单一文件,非常便于管理。
尽管 Word、PPT 看起来是单一文件,但它们实质是类似 zip 格式压缩的文件集合。设法将其改为压缩包并解压,会发现里面包含了一系列 XML 文件、媒体文件和其他资源。如果将附件和 Markdown 文件放在同一个文件夹并将其打包,就像创建一个 zip 压缩文件一样,这与 Word、PPT 的工作方式本质相同。
当然,打开一个放在文件夹中的文件和打开一个打包好的文件体感还是很不同的。粗略说来:
- 前者需要先打开文件夹再打开文件,后者直接点击就能打开。
- 尤其是很多文件夹放在一起,且不清楚哪些下面还有别的文件,哪些只是一个打包好的文件时,会使文件树变得复杂。
关于第 1 点,Folder notes 插件 是一个很好的解决方案。被打包的文件通过命名与文件夹链接上后,我们就能在 Obsidian 单击文件夹打开文件了。
关于第 2 点,效果:若当前文件夹下只有一个文件和一个文件夹,且文件夹符合附件默认存放路径命名,为当前文件夹添加 F
标识。
main.js 代码短,可直接粘贴或缝到自己插件里:
const ob = require('obsidian')
, import_fe = class {
constructor(app) {
const feApi = app.workspace.getLeavesOfType('file-explorer')[0].view
this.fdItems = Object.values(feApi.fileItems).filter(p=> !p.file.extension)
this.attachFd = app.vault.config.attachmentFolderPath.slice(2)
}
zip_file = ()=> {
this.fdItems.map(p=> {
const [cFds, cFs] = p.file.children.reduce((acc, item)=> {
!item.extension ? acc[0].push(item) : acc[1].push(item); return acc
}, [[], []]); p.tagEl && p.tagEl.remove()
if (cFds[1] || cFs.length != 1 || cFds[0]?.name != this.attachFd) return
p.tagEl = p.selfEl.createDiv({cls: 'nav-file-tag', text: 'f'})
})
}
}
module.exports = class extends ob.Plugin {
onload() {
this.app.workspace.on('active-leaf-change', ()=> new import_fe(this.app).zip_file())
}
onunload() {}
}
-
文件与链接 - 附件默认存放路径设置为“当前文件所在文件夹下指定的子文件夹中 In subfolder under current folder”。
-
活动文档 active-leaf 变动时刷新。