作为一名开发者,每次写技术博客最烦的事情是什么?
对我来说,不是排版,不是配图,而是粘贴代码。
从编辑器复制一段代码,贴到 CSDN 里,格式乱了,还得手动选中、点代码块、选语言。或者更原始一点,自己敲三个反引号```,再补上python。一天写下来,光是搞代码块就要浪费几分钟,极其消磨耐心。
为了解决这个摩擦,我花了一段时间,写了一个轻量级的浏览器扩展——CodeFencer。今天开源出来,希望能帮到同样被这个问题困扰的朋友。
🚀它能干什么?
简单来说,它让你在写博客时,只用一个快捷键就能完成代码块的转换。
核心功能有三个:
Ctrl+Shift+V(粘贴即代码块):复制代码后按下,自动读取剪贴板、识别语言、加上围栏,写回剪贴板。
Ctrl+Shift+F(选中转代码块):选中已输入的文字,原地加上围栏。
Ctrl+Shift+X(去围栏):选中代码块,一键去掉外面的
```。
内置了十几种常见语言的自动检测(bash、python、javascript、typescript、java、cpp、go、sql、json、html、css、php、csharp),基本覆盖日常写作需求。
⚠️关于 CSDN 使用体验的坦诚说明(必看)
这里必须坦诚地告诉大家一个技术上的限制。
因为 CSDN 使用的是基于 ProseMirror 的富文本编辑器,它的内部模型非常严格。任何绕过它直接修改 DOM 的行为,都会被它覆盖或引发崩溃。所以我放弃了“强行注入”的思路,选择了“剪贴板降级方案”。
在 CSDN 这种MD编辑器里,具体操作流程是:
复制代码。
按下
Ctrl+Shift+V。此时插件会弹出提示:“已转为代码块 [语言],请按 Ctrl+V 粘贴”。
你只需要再按一次
Ctrl+V,它就会完美插入代码块。
虽然多按了一次键盘,但这保证了 100% 的可用性和稳定性,不会把你辛辛苦苦写的文章搞崩。
(注:在标准的 Markdown 编辑器如 GitHub、掘金 Markdown 模式下,它是直接自动插入的,不需要第二次Ctrl+V)
🛠️ 目前还不太完善的地方(一些真实的缺陷)
作为一个刚写出来的 v1.0.0 版本,我必须诚实地承认它远非完美。目前已知的不足有:
语言检测并非 100% 准确:如果是 TS 和 JS 混写,或者写法比较小众的代码,可能会检测错语言。目前我用了一套启发式的规则,还需要慢慢喂养和完善。
富文本编辑器体验割裂:在 CSDN、知乎等地方,目前只能做到“写回剪贴板 + 手动粘贴”,多了一步操作,没有达到真正的“一键”。
受控组件支持有限:如果你的页面用 React 或 Vue 封装了非常复杂的自定义编辑器,直接修改
value可能会失效。适配面还比较窄:目前主要测试了 CSDN、GitHub、掘金和原生 textarea,对于 Notion、Obsidian、飞书等复杂的编辑器,尚未做专项适配。
📢 未来计划 & 邀请大家共建
一个人开发,视野和精力总是有限的。
这个项目我会持续维护下去。如果你在使用中遇到了 Bug,或者有什么好的建议,恳请大家不要直接在评论区骂我哈哈,去 GitHub 提一个 Issue,或者在这里留言告诉我。
未来的迭代方向包括:
引入打分制算法,把语言检测的准确率提上去。
探索针对 ProseMirror 或者 Slate.js 等主流富文本框架的底层适配,争取做到在 CSDN 里也能真正“一键插入”。
听取大家的反馈,适配更多个性化的编辑器环境。
一人计短,二人计长。大家的每一个建议,都会成为它变好的阶梯。
🔗 安装使用
扩展已经开源在 GitHub,完全免费,无任何依赖,体积只有几十 KB。
GitHub 地址:
https://github.com/jiangwensheng891-source/CodeFencer
安装步骤:
打开上面的 GitHub 链接。
在右侧找到Releases,点击下载最新的
CodeFencer-v1.0.0.zip。解压到一个你电脑上的固定文件夹。
打开浏览器,地址栏输入
chrome://extensions/(Edge 是edge://extensions/)。打开右上角的“开发者模式”。
点击左上角的“加载已解压的扩展程序”,选择你刚才解压的文件夹。
搞定!现在你可以打开 CSDN,复制一段代码,按下Ctrl+Shift+V试试了。
💡开发背后的故事
写这个插件的过程中,踩了不少坑。尤其是针对 CSDN 富文本编辑器的适配,尝试了execCommand、合成ClipboardEvent、直接改textContent,最终发现“不跟它对抗,退回剪贴板”才是最稳的方案。
这也让我明白,有时候在工程上,“优雅降级”比“强行注入”更靠谱。
🙏写在最后
如果你觉得这个小工具帮到了你,欢迎去 GitHub 给我点一个 Star ⭐️,这是对我最大的鼓励。
如果在使用过程中遇到任何问题,或者有适配其他编辑器的需求,欢迎在 GitHub 提 Issue,我会持续维护。
感谢阅读,祝大家写博客愉快!