问题描述
我有两个笔记Linux.md和C-C++.md。起初,Linux.md和C-C++.md是在同一个目录(比如目录AAA
),他们引用的图片全在AAA/assets
目录下。
现在,我将笔记迁移到Obsidian上,将C-C++.md和AAA/assets
目录复制到下图的01-C-C++
目录下,而将Linux.md复制到下图的02-Linux
目录下,并新建一个空的02-Linux/assets
目录。
结果发现,Linux.md下的图片引用居然可以显示正常图片!点进去发现该图片实际存放位置在01-C-C++/assets
目录中。
预期效果
预期的效果是02-Linux/Linux.md
由于其02-Linux/assets
目录下为空而不能够显示图片。
应该只能改成 ./assets/图片.png
这种相对路径的写法。
这个路径解析的逻辑是这样的(比如链接是 [](assets/2025-5-16.png)
,在文件 Linux/linux.md
中):
- 首先找到所有叫
2025-5-16.png
的图片
- 然后比较路径字符串
- 如果完全匹配,则作为结果返回
- 尝试匹配后缀,也就是看该图片路径是否以
assets/2025-5-16.png
结尾
- 如果后缀匹配成功,匹配前缀,也就是看该图片是否在
Linux
文件夹下(与该笔记在同一个父路径下)。匹配成功,放入数组 A。匹配失败,放入数组 B。
- 合并 A 和 B,作为候选结果(A在前B在后,所以A中的结果优先级高)
- 在所有候选结果中,选择第一个作为最终结果。
所以 assets/图片.png
,可能会选中任意文件夹下面的 assets/图片.png
。而如果用相对路径,就更精确一些,会用 Linux/assets/图片.png
来匹配。
1 个赞
不过,现在的实现确实有 bug 。
比如,你可以试试在 Linux/笔记.md
里面引用 ./assets/图片.md
,然后把图片放在 Windows/Linux/assets/图片.png
,居然也能显示出来。。
目前看来,好像改为这种
才有效。
但当你更改图像文件名时,如果让它“自定更新文件链接”,会发现它又在引用的时候改为
这种形式