惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
IT之家
IT之家
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
U
Unit 42
爱范儿
爱范儿
博客园 - 聂微东
F
Fortinet All Blogs
V
Visual Studio Blog
Blog — PlanetScale
Blog — PlanetScale
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
L
LangChain Blog
雷峰网
雷峰网
B
Blog RSS Feed
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
H
Hackread – Cybersecurity News, Data Breaches, AI and More

东东's Blog

Memos: MacOS 下编译安装 Aseprite 脚本 日本关西系列|Day 2 京都的半日闲逛 美国Apple官网购买礼品卡订阅 ChatGPT Plus 北京・中关村森林公园(2026) 日本关西系列|Day 1 抵达临空城与大阪首日 Memos: 查询 Apple ID 注册时间 Memos: Ghostty 开箱即用配置 代码考古:用 gitcharts 挖掘 Git 仓库的演变轨迹 烹饪日记:香煎罗非鱼 Memos: 新时代程序员的顶级焦虑 Memos: 博客新增图文布局和轮播图效果支持 Memos: 最适合空气炸锅烤着吃的红薯品类 Memos: 记录「95分」好吃的‘小帅香菇面’ 妻子爷爷的‘朝鲜军功奖章’ Memos: 博客切换为 Shiki 代码高亮方案 Memos: 博客新增划线、重点及荧光笔效果支持 记录博客字体分包与字体子集化 Memos: 邻座吃饭的一家三口 人在囧途之哈囧 哈尔滨・乡村的冬季 查看香烟生产日期 哈尔滨・东北虎林园 Memos: 来自日本的 ndjp 提供免费的三级子域名 Memos: 刚听说 autojump, 真的好用 Memos: 体验 OpenCode + Superpowers + GPT 5.2 开发需求 Memos: 杰我睿爆雷 GoReleaser 自动发布 Go 镜像到 DockerHub & GitHub Release 初识 Volta & Corepack 前端版本管理工具 部署 Beszel 把 “小鸡们” 归拢起来 Memos: Claude Code in Action 中文版教程
Cursor 开发 Obsidian 插件记录
2025-02-24 · via 东东's Blog

最近想到整理笔记、发布博客的自动化程序还不够(需要手动替换 Markdown 格式文章中的图像地址为图床地址),另外不同的图像,显示时需要手动调整下 Width 宽度,这就很枯燥

使用了 Cursor 一段时间,Tab Tab Tab...,突然想到,可以让 AI 协助写一个 Obsidian 插件,编写文章使用 Obsidian,导出即为博客所需的文章格式,开搞!以下是使用 Cursor 编写插件的记录,同时使用到了 DeepSeek

环境准备

确认 Node 环境

01.jpg

Step.1 下载示例插件

从示例开始

https://docs.obsidian.md/Plugins/Getting+started/Build+a+plugin

新建一个空白的仓库(Vault)

到仓库的插件目录并 Clone 示例插件

$ cd ~/Documents/donx-notes/
$ mkdir .obsidian/plugins
$ cd .obsidian/plugins

Step.2 构建插件

$ cd obsidian-sample-plugin
$ npm install
$ npm run dev

Step.3 启用插件

  1. In Obsidian, open Settings.
  2. In the side menu, select Community plugins.
  3. Select Turn on community plugins.
  4. Under Installed plugins, enable the Sample Plugin by selecting the toggle button next to it.

02.jpg

开启插件

03.jpg

使用 Cursor 打开插件目录

建议:先在 Github 等代码托管仓库创建一个仓库,例如我的仓库名叫 obsidian-article-exportor ,本地路径是 ~/Documents/donx-notes/.obsidian/plugins/obsidian-article-exportor/,我将新的仓库的 .git 目录替换掉 Demo 的,然后将 Demo 的目录名和 manifest.json 文件修改,编写代码随时提交,后续 AI 生成如果不满意可以随时撤销代码

04.jpg

特别留意的是,修改后重载插件使其生效的方式是 Commond + P,搜索并点击 “重新加载...”

05.jpg

Step.4 那么,接下来交给 AI

描述:请帮助我修改 obsidian 的 Plugin 插件,它的功能是导出当前文章(笔记)和这个文章内置的图像,存储到指定目录,点击插件的按钮,自动导出,默认导出到用户的 Downloads 目录, 另外导出到目录可以通过配置来修改,或者是点击导出的时候选择目录,都是可以的,由你选择,暂时提供导出文章的代码即可,图像后续再处理

重载插件后,点击插件图标弹出提示,并没有真实的导出文章到用户 Downloads 目录

描述:请不要再保留默认导出到 Downloads 目录的逻辑,如果用户未设置,抛出提示:“请先设置插件的导出目录”

看了下代码,发现它没有修改点击插件图标的事件,而是添加了一个命令去做,键盘 Command + P 调出,搜索执行命令 “Export Current Note”

06.jpg

正确提示了 “请先设置插件的导出目录”

07.jpg

设置目录

08.jpg

再次执行导出笔记,在下载目录已经可以看到 MD 文件

09.jpg

修改代码可用性还是很高的,继续优化,增加功能

10.jpg

先写一个示例笔记,然后描述需求如下

请完善其功能,需要在导出文章的同时导出图片,需要做转换,图像需要根据其在文章内的位置重命名为 01.jpg, 02.jpg, 03.jpg 这样,另外导出的图像要放在一个以时间戳命名的目录中,例如 1740276438,然后相对的路径就变为了 1740276438/01.jpg,替换掉导出文章内的图像地址

存在问题,未正确替换文本内容,也没有复制/重命名图像

代码有一些问题,因为是 Obsidian 的特有的 “[[” 写法,”Pasted image 20250223095948.png“ 并没有被替换掉,同时正确生成了时间戳命名的目录并创建,但是没有将图像复制到目标目录下

然后 Cursor 提供了正确的代码,插件能够正确工作

11.jpg

继续提出一些优化需求

我们知道,在 Obsidian 的图片链接中,会有 “|420” 这样的写法,表示图片设置为 420px 的宽度,这样有助于显示更好的效果,但是在正常的 Markdown 语法中,不支持这种写法,一个折中的方式是使用 HTML image 标签,例如:< img src="..." width = "78%" / > 这样,我希望进行判断,如果 Obsidian 的链接没有 "|xxx" 这样的描述,你获得图像沿用现在的转换逻辑,如果包含 "|xxx" 这样的语法,那么将导出后的链接修改为 < img ...> 这样的链接,width 需要根据实际图像的宽度和 |xxx 这样的数值动态计算出来,例如 "|420",实际宽度是 1000px,那么目标是 < img ... width = "42%" > 请提供修改后的代码

Cursor 修改了代码,再次运行,生成的文件内容如下

Icons

![[1740317458/01.jpg]]

缩小显示尺寸的图像示例

![[Pasted image 20250223095948.png|360]]

我刚发现导出的文件内的链接地址不对,让 Cursor 再修改下

导出的文件内容不对,首先,需要将 “[[” 这样的链接修改为 ![01](1740317458/01.jpg) 这样的标准 Markdown 图像链接语法,注意我举例中的 \ 符号,是转意用的,另外还有一处错误,|360 这样的描述,需要转换为 < img ... > 这种链接,请修改代码

无法正确输出... 看起来简单的描述它没办法理解我的意思

这个是 Obsidian 的笔记内容

Icons

![[Pasted image 20250223095948.png]]

缩小显示尺寸的图像示例

![[Pasted image 20250223095948.png|360]]

我希望导出后的内容是以下的格式

Icons

![01.jpg](1740318018/01.jpg)

缩小显示尺寸的图像示例

<img src="1740318018/02.jpg" width = "78%" />

如果你理解了我的意思,请重新生成代码

我感觉 Cursor 快冒烟了,输出一直是

Icons

![[Pasted image 20250223095948.png]]

缩小显示尺寸的图像示例

!![01.jpg](1740318460/01.jpg)

没办法,懒得改哪怕一行代码,我把 main.ts 粘贴给了 DeepSeek,给它的内容如下


以下是 obsidian 的插件代码,ts 格式的 

省略代码...

它的作用是导出笔记和图像,笔记的图像地址按照一定规则转换,规则描述如下

这个是 Obsidian 的笔记内容

Icons 

![[Pasted image 20250223095948.png]] 

缩小显示尺寸的图像示例 

![[Pasted image 20250223095948.png|360]] 

我希望导出后的内容是以下的格式

Icons 

![01.jpg](1740318018/01.jpg) 

缩小显示尺寸的图像示例 

<img src="1740318018/02.jpg" width = "78%" /> 

注意这里的 width 比例是根据图像和 “|360” 比例计算出来的,现在的 ts 代码不正确请提供修复后的代码

然后把返回结果粘贴回来

12.jpg

重新运行,可以了!生成的代码符合预期

13.jpg

继续完善,因为最终的文章链接是 URL,需要增加配置

请帮助我修改代码,我希望添加一个设置,名为 host,如果配置了 host,那么生成图像的链接不是现在的 1740390067/02.jpg,而是 http://xxx.com/1740390067/02.jpg 这样的地址

在老的 Chat 聊天感觉它已经神经错乱了 🤪

让 DeepSeek 继续调整了代码,它正确新增了配置项

14.jpg

同时文本内容正确处理(图像未显示符合预期,因为我还没上传到存储)

15.jpg

新建一个 Cursor Chat 聊天窗口,给它个简单的任务找回信心

为代码增加注释

至此,我才开始阅读代码,在插件开发完成之后

一些收获

除了最开始的环境准备参考的官方说明,后续编码全都由 AI 编写,没手写一行功能代码,对程序员来说,AI 辅助编程在开发者进入新领域、使用新语言时,能提供极大的助力

例如我不会 Typescript、也没去了解 Obsidian 的开发文档,但不影响我开发一个满足需求的插件,这真的很棒

另外,本次使用 Cursor 程度依然较低,还有不少 Cursor 的技巧没有去学习和使用,本篇先到这里,本篇文章已借助 Obsidian 插件导出后发布:

枯燥--

效率++

2025-02-25 补充

P.S. 昨天脑袋卡了,Cursor 已经内置了 DeepSeek V3 模型,我还复制到 DeepSeek 网页 Chat 做什么呢...?

另外 Cursor 已可使用 claude-3.7-sonnet 和 claude-3.7-connet-thinking,值的一试

昨天一直用的是默认的 gpt-4o (无奈脸