obsidian半自动删除picgo远端图床照片
1 背景
文档主要内容是Obsidian
基于QuickAdd 宏配置 和 JS删除脚本,快速删除远程picgo图床图片——通过 FTP 删除远程图片。如果是阿里云或者腾讯云的图床应该也可以实现,只不过要重新写删除脚本了。
我不知道为什么picgo设计的是只能上传不能删除,写文档的时候上传了不合适的图片其实挺常见的,上传容易,要删除的时候就很麻烦,其实想要研究这个问题很长时间了,一直到最近失业了才有闲暇来解决。
网上看到了PicList实现了云端删除功能,设想你写着文档还得打开另一个软件,还得找图片,还得删。有这个空挡我其实直接登上服务器也能删,感觉不是很方便。
这篇文档介绍的这个方法只能说是相对方便一点,因为使用快捷键启动QuickAdd插件后,还得点一下自定义的删除菜单,要是能直接用快捷键删除就更好了。
2 安装依赖
前置条件: 已安装node 、npm
1 | npm install -g basic-ftp |
实际上npm install basic-ftp应该也可以,但是一直没找到应该安装的路径,在vault根目录安装basic-ftp失败,ctrl+shift+i 查看obsidian 的console 总是提示找不到包。猜测是 QuickAdd 的 Node.js 环境隔离导致的,Obsidian 插件运行在特殊的 Electron 环境中,经测试直接安装依赖到插件目录依然无效,只能全局安装了。
3 创建删除脚本 (vault/ftp_delete_image.js
)
脚本存放路径在仓库根目录:vault/ 或者仓库下的子目录: vaul/{任意子目录}/
1 | const fs = require('fs'); |
4 QuickAdd
安装插件,步骤略
4.1 配置 QuickAdd 宏:
打开 Obsidian 设置 → QuickAdd → Manage Macros → 输入宏名称
Delete FTP images
→ Add Macro。点击Configure添加以下 Action:
Action 1: Editor commands →
Copy 主要目的是复制到剪贴板,把图片url传递给脚本
Action 2: User scripts
选择脚本ftp_delete_image.js如果脚本存放路径不对是找不到脚本的,我花了点时间才发现需要放在仓库根目录
Action 3:Editor commands→Select active line
Action 4:Editor commands→Cut
第三四步主要目的是删除当前行。
添加宏到选项菜单
打开 Obsidian 设置 → QuickAdd→输入选项菜单名称Delete Images(自定义,任意输入即可)选择Macro→Add Choice
点开Choice后面的选项⚙️→选择Macro。如果以前没用过,这是第一个Macro,QuickAdd会自动关联,可以省略这个步骤
5 使用流程
5.1 QuickAdd绑定快捷键:
- 打开 Obsidian 设置→快捷键→为QuickAdd设置快捷键,比如
Alt+Q
- 如果不绑定直接Ctrl+p→QuickAdd:Run QuckAdd 也能打开菜单,只不过有点慢
5.2 手动触发(可选):
按下快捷键 → 输入图片URL → 自动删除远程文件。
本来是这个方向,觉得不太方便,没有继续,需要修改脚本自行测试:
1
2
3const val = await inputPrompt("输入测试内容");.
deleteFtpImage(val);
将变量传递给imageUrl就行了,可以不再读取剪贴板
5.3 自动获取图片URL
直接从当前笔记中提取URL,然后使用quickadd的宏功能调用js脚本删除
左键单击图片→按下快捷键
Alt+Q
→选择刚才添加的Choice菜单Delete Images
6 参考
https://quickadd.obsidian.guide/docs/Choices/MacroChoice
https://github.com/chhoumann/quickadd/issues/15#issuecomment-864553251
7 思维扩散
如果监听文件自动删除,很自然地就会联想到在Windows上有没有像inotify这样的东西,搜了下还真有——inotify-win,但是看着很长时间没更新了,windows更新这么快,也不知道这个软件还好不好用。如果监听本地文件的话,还要研究怎么实现图片本地链接可以支持多个客户端调用,怎么着也得把图片链接改成远端链接。不划算,这个想法以后再说吧。
还有个想法,不知道有没有什么插件可以监听文本编辑状态,就像编程软件可以跳出提示一样,点击图片直接跳出“删除”选项。
QuickAdd应该只支持js, 一开始写了个python版的识别不到,搜索类似quickAdd支持python的插件。
上传删除要用两个插件,这图片处理真是菜。不知道有没有同时支持这两个功能的插件,如果有请告诉我,不胜感激!🤝