一篇 Markdown,一键发到微信、知乎、小红书、Twitter

一篇 Markdown,一键发到微信、知乎、小红书、Twitter

开源地址:marsggbo/markdown2anything VS Code 商店搜 Markdown2Anything · CLI:npm i -g md2any


1. 它解决什么

写技术博客我一直是 Markdown 一把梭。但写完之后,真正花时间的从来不是写作,而是分发

复制到微信排版全乱、公式变乱码;发知乎图片要一张张重传;发小红书得先把文章截成图再手动拖进去、还得另写一份标题正文标签;发 Twitter 又要重写一遍拆成串推、图再传一次。

一篇文章写完,光”搬运”就得再花一个多小时,而且毫无创造性。

所以我写了个 VS Code 插件把这事儿干掉:一篇 .md,一个面板,四个平台。

全局界面

左边是实时渲染预览,上面一排是各平台的一键操作,右边是发布面板。整个流程不用离开编辑器。


2. 渲染效果

先看它把 Markdown 渲染成什么样。下面就是我另一篇文章在预览区里的实际效果——标题层级、加粗、表格、代码高亮、LaTeX 公式、图片说明全部处理好了:

渲染效果

几个细节:

  • LaTeX 公式:KaTeX 渲染,行内 $...$ 和公式块 $$...$$ 都支持。导出微信时会自动转成 SVG(不然公众号编辑器会把它洗掉)。
  • 代码高亮:macOS 风格的窗口装饰 + 语法高亮,复制到微信后高亮不丢
  • 图片:本地图片自动转 Base64 内嵌,不需要图床。图片的 alt 文字会自动渲染成居中的灰色说明。
  • 10 套内置主题,还能在线改 CSS,所见即所得。

3. 四个渠道,各自怎么用

3.1 微信公众号 🐧

微信是最难伺候的:它的编辑器会洗掉外链 CSS,只认内联样式。所以插件做了两件事:

  • 📋 复制微信:把渲染好的 HTML 用 juice 把所有 CSS 内联进标签里,公式转 SVG,代码高亮转内联 style。直接 Cmd+V 粘进公众号编辑器,排版一模一样,不用再手动调。
  • ☁️ 上传公众号:配好 AppID / AppSecret,直接推到草稿箱,连粘贴都省了。

这是我用得最多的功能——以前一篇长文粘完要手动修二十分钟排版,现在是零。

3.2 知乎 📝

  • 🚀 发布知乎:扫码登录后,浏览器自动打开编辑器,标题、正文、代码块、公式全部自动填好
  • 代码块自带语言高亮,不用再手动去下拉框里选语言(这里有个坑:highlight.js 生成的 class 是 hljs python,很容易把语言错识别成 hljs,知乎收到一个不认识的语言,既不高亮、也不当代码块处理,换行会全丢、折叠成一行)。
  • 公式转成知乎原生的 eeimg 格式,能正常渲染。

但有一个我没搞定的地方,得老实说:知乎的图片仍然要手动粘贴。

知乎编辑器不会自动抓取粘贴进来的图片——base64 不行,远程 URL 也不行。只有剪贴板里躺着一张真正的图片位图时,它才会上传到自己的图床。我试了各种自动化路线(走它的图片弹窗、起本地图床让它自己抓),全都失败了

所以退而求其次,做了个「📋 复制图片」:预览区鼠标移到任意图片上,点一下,复制的是真正的 PNG 位图(不是 data URL),到知乎里 Cmd+V 就会被自动上传。虽然还是手动,但至少不用再去文件夹里翻文件、走上传对话框了。

能自动的自动了,不能自动的老实承认。

3.3 小红书 & Twitter:自动发布 🚀

这两个是这次的重头戏,放一起说——因为它们的问题是同一个

它们要的不是”同一篇文章”,而是 “同一份内容的另一种表达”

小红书要的是图 + 一段口语化的种草文案 + 标签;Twitter 要的是拆成好几条的串推。所以光搬运没用,得重写。这块插件接了 LLM,并且做到了全自动发布

小红书流程:

  1. 文章自动截成多张长图(智能分片,会尽量在空白行处切,不会把一段话拦腰砍断)

    长图示例

  2. AI 自动写好标题、正文、标签(标题会实时校验小红书 20 字上限,超了标红)
  3. 登录一次(扫码,Cookie 自动存好,面板上有有效期倒计时
  4. 点发布 → 浏览器自动打开、自动传图、自动填标题/正文/标签
  5. 你核对一眼,点页面上的「发布」——完成

小红书面板

Twitter 流程:

Twitter 面板

  • AI 自动生成中文串推(thread),而且条数不是拍脑袋定的条数 = ⌈长图张数 ÷ 4⌉(X 单条最多带 4 张图)。每条推文讲的就是它配的那几张图里的内容,做到文图对得上。
  • 字数按 X 的真实规则实时校验——X 的 280 字上限是加权的,一个中文字符算 2 个,链接固定算 23。面板上显示的就是这个真实字数,超了标红,发布前直接拦下(这个坑很多人不知道,超限时 X 会直接把「发帖」按钮禁用掉)。
  • 发布时浏览器里自动把整串填好 + 按顺序配好图,你点「发帖」即可。

共同的设计:

  • 配图会自动检查:没导出长图?发布时自动帮你导。数量对不对得上也会校验。
  • 默认不替你点最后那下「发布」:内容和图都填好后停下,让你在发出去之前再核对一眼。这是我特意的选择——自动化到最后一厘米就停,把决定权留给你。

3.4 AI 文案:不配 Key 也能用

文案生成接的是任意 OpenAI 兼容接口(DeepSeek / OpenRouter / Groq / 本地 Ollama / OpenAI…),面板里下拉一键预设。

你不配 API Key 也能用:内置了一套本地关键词提取算法(中英混合 n-gram + 停用词过滤 + 长词吸收短词),面板一打开就把标题、正文、标签自动填好了,零配置零成本。想要更好的文案,再点「✨ 生成文案」用模型覆盖。

另外两个实用的小设计:

  • Prompt 可编辑:不满意就改了重新生成。
  • 版本管理:LLM 生成很难一次满意,所以每次生成都存成一个新版本,旧版全保留。面板上 ◀ ▶ 左右切换对比,看中哪版用哪版,🗑 单独删掉不要的。全部落盘到文章同目录的 _social.json,可以跟文章一起 git 备份。

3.5 关于安全

  • API Key 存进系统钥匙串(VS Code SecretStorage),不落明文、不进 Settings Sync、不会被误提交进 git。
  • Cookie 只存本地唯一的网络去向就是平台自己,不经过任何第三方服务器。
  • 发布走的是真实浏览器 + Cookie 注入(模拟真人正常操作),而不是伪造签名的裸 HTTP 请求。

4. 不只是插件:CLI + Agent Skill

写着写着我发现,把它锁死在”编辑器里的一个按钮”太可惜了。所以又做了个命令行版,已经发到 npm:

npm i -g md2any          # 或者直接 npx md2any

md2any login xhs
md2any images ./post.md              # 渲染长图
md2any gen ./post.md --to twitter    # 生成串推
md2any publish ./post.md --to xhs,twitter

核心逻辑(渲染、切图、LLM 文案、Playwright 发布)完全复用插件那一套,没有重写——插件和 CLI 是同一个引擎的两个壳,连文案的版本历史都共用同一个 _social.json

而且它是为 Agent 设计的

  • stdout 只出结果,stderr 出日志 → 可以安全 pipe 和解析
  • --json 给结构化输出
md2any gen ./post.md --to twitter --json 2>/dev/null | jq '.twitter.tweets'

仓库里有一份 SKILL.md,把 cli/ 挂进 Claude Code 之类的 Agent,它就能听懂“把这篇文章发到小红书和推特”——从”我的工具”变成任何大模型都能调用的一种能力

顺带一提,我在那份 skill 定义里特意写死了一条:

⚠️ 不要向用户承诺知乎图片能自动上传。

因为 Agent 最容易犯的错,就是把限制说成能力。这是我们真金白银试出来的教训,得钉进契约里,不能让下一个 Agent 再去踩、再去骗用户。


5. 怎么装

插件:VS Code 扩展市场搜 Markdown2Anything

CLInpm i -g md2any

打开任意 .mdCmd/Ctrl + Shift + W 打开面板即可。首次用到截图/发布功能会自动下载 Chromium(约 150MB),之后无需等待。


项目地址:github.com/marsggbo/markdown2anything(MIT)

欢迎 star、提 issue、拍砖,更欢迎 PR。


最后打个软广宣传一下我们团队最近出版的《动手学 AutoML:从 NAS 到大语言模型优化实战》,书里有专门讲大语言模型优化与工程实践的章节,对于想学习大模型技术细节的同学和工程师朋友很有帮助。

动手学AutoML书籍封面

Flag Counter