Obsidian代码块语言自动填充插件 Code Lang Autofill
Obsidian代码块语言自动填充插件 Code Lang Autofill
一个 Obsidian 插件:自动识别没有语言标签的代码块并补上语言标签(python/java/c…),识别没把握的块一律跳过不填,还配了「记住上次语言」和代码块右下角的选语言按钮。
为什么需要它
在 Obsidian 里写技术笔记,最容易被忽略的就是代码块的语言标签。很多人(包括我)写起来是这样:
```print("Hello")```反引号后面空空的。后果是:代码块没有语法高亮、渲染成一片灰,复制代码块时格式也不友好——但真相往往是你只是忘了打那四个字母,并不是不想打。手动补又费劲,尤其是连续贴好几段不同语言的代码时。
这个插件就是干这件事的:自动识别代码块内容,把语言标签补上去。
它帮你做什么
1. 自动识别、自动补全
打开笔记、保存、或者在编辑器里输入时,插件会自动扫描没有语言标签的代码块,识别出内容属于哪种语言,然后补上去:
``` → ``` pythondef greet(name): print(f"hi, {name}")``` ```内置了 20+ 种常见语言的特征识别:Python / Java / C / C++ / C# / JavaScript / TypeScript / Go / Rust / PHP / Ruby / SQL / HTML / XML / CSS / Bash / Dockerfile / PowerShell / JSON / YAML / Markdown / Lua / Kotlin / Swift 等。
2. 记住上次使用的语言
你是不是经常一段笔记里连续贴好几个同语言的代码块?插件会记住你最近一次使用的语言,新建的空代码块会自动带出来:
刚写完一个
python块,再敲一个```+回车,新代码块自动变成``` python。
3. 识别没把握时,右下角「⌄」一键手动选
自动识别毕竟是启发式的,遇到太短、太像普通文本、或者两种语言特征相近的代码,它拿不准就会跳过不填(这是它故意保守,等下说)。
这时候就该手动出场:每个没填语言的代码块右下角会有一个小小的「⌄」按钮,点一下弹出语言列表直接选。列表还做了三层排序,基本不需要翻:
- 高置信度「· 检测建议」→ 拿不准但猜得出来的「· 可能」
- → 最近用过的语言 → 字母序
所以想补一个 SQL 块,点一下,列表第一行往往就是它,回车完事,比手打快得多。
安全设计:它不会搞乱你的笔记
这是我最看重的一点,也是它敢自动改文件的基础:
- 绝不碰已有标签:已经写了
```python的块,动都不会动。 - 没把握就跳过:识别置信度不够的块一律不填,宁可空着,绝不填错。
- 只改开栏行:只在三个反引号后面补一个语言 token,代码内容一个字符都不改。
- 可撤销:每个改动都是一次独立编辑,
Ctrl+Z能逐条撤销。 - 幂等:已经填过的块,再跑多少次都不会被改动。
- 只作用于你设置的处理目录(默认
content/posts),目录外的笔记一个不碰。
一句话:宁缺毋滥。它可能有时候漏填,但不会乱填。
使用
启用后重载 Obsidian(Ctrl+P →「重新加载应用」),在设置 → 第三方插件里打开 Code Lang Autofill 即可。
设置项只有三个(都很直观):
| 设置 | 默认 | 说明 |
|---|---|---|
| 处理目录 | content/posts | 只处理该目录下的 md 文件;留空 = 整个库 |
| 自动补全 | 开 | 打开/保存/输入时自动补全;关闭后仅手动命令与按钮生效 |
| 新建代码块自动带出上次语言 | 开 | 新建空代码块自动填上最近一次语言 |
命令也保留了(不想走自动路径时):
- 「补全当前笔记的代码块语言」
- 「补全全库(处理目录内)代码块语言」
- 「为当前代码块选择语言」
为什么我敢把它做成”自动改文件”
市面上类似思路的插件不少,但很多是无脑填,或者检测差口气。Code Lang Autofill 把「识别」和「写入」分成了两层:
- 识别层:自研启发式 + 置信度评分,每个语言一整套特征规则;拿不准就返回”空白”,绝不硬猜。
- 写入层:接一层”插入点”再落笔,只落在开栏行的反引号后,天然可撤销、幂等。
识别层是纯逻辑、连 Obsidian API 都不碰,可以脱离 UI 直接做单元测试——整套行为(解析、易混语言判别、幂等、低置信度跳过)都用测试钉死了,这也是它有底气”自动改”的原因。
已知边界 & 小提示
- 启发式识别不是 100%:太短的块、纯命令输出、两种语言特征太接近时,它选择跳过(安全优先)。这种时候右下角「⌄」点一下就行。
- 「记住上次语言」在”连续写同语言”的场景很好用;但如果刚写完 Python 就往新块里贴了一段 SQL,新块会被先标成 python——注意一下,用「⌄」一键改回来即可,代价很小。
项目
- 开源、零运行时依赖,GitHub:https://github.com/tianshihao2003/obsidian-code-lang-autofill
- 欢迎使用后反馈识别不准的代码块样本,规则表就是靠真实样本一点点喂出来的。
如果你也经常为代码块没有语言标签而烦恼,装上试试,从此 ``` 后面的语言,基本不用自己打了。
评论区
如果你喜欢,那么欢迎来到我的世界!
了解更多










