Obsidian代码块语言自动填充插件 Code Lang Autofill

Obsidian代码块语言自动填充插件 Code Lang Autofill

2026年8月18日·#开发工具obsidian/插件/开发工具·1341 字 7 分钟
浏览量加载中...
AI 摘要

一个 Obsidian 插件:自动识别没有语言标签的代码块并补上语言标签(python/java/c…),识别没把握的块一律跳过不填,还配了「记住上次语言」和代码块右下角的选语言按钮。

为什么需要它#

在 Obsidian 里写技术笔记,最容易被忽略的就是代码块的语言标签。很多人(包括我)写起来是这样:

```
print("Hello")
```

反引号后面空空的。后果是:代码块没有语法高亮、渲染成一片灰,复制代码块时格式也不友好——但真相往往是你只是忘了打那四个字母,并不是不想打。手动补又费劲,尤其是连续贴好几段不同语言的代码时。

这个插件就是干这件事的:自动识别代码块内容,把语言标签补上去

它帮你做什么#

1. 自动识别、自动补全#

打开笔记、保存、或者在编辑器里输入时,插件会自动扫描没有语言标签的代码块,识别出内容属于哪种语言,然后补上去:

`````` python
def 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 块,点一下,列表第一行往往就是它,回车完事,比手打快得多。

安全设计:它不会搞乱你的笔记#

这是我最看重的一点,也是它敢自动改文件的基础:

  1. 绝不碰已有标签:已经写了 ```python 的块,动都不会动。
  2. 没把握就跳过:识别置信度不够的块一律不填,宁可空着,绝不填错。
  3. 只改开栏行:只在三个反引号后面补一个语言 token,代码内容一个字符都不改
  4. 可撤销:每个改动都是一次独立编辑,Ctrl+Z 能逐条撤销。
  5. 幂等:已经填过的块,再跑多少次都不会被改动。
  6. 只作用于你设置的处理目录(默认 content/posts),目录外的笔记一个不碰。

一句话:宁缺毋滥。它可能有时候漏填,但不会乱填。

使用#

启用后重载 Obsidian(Ctrl+P →「重新加载应用」),在设置 → 第三方插件里打开 Code Lang Autofill 即可。

设置项只有三个(都很直观):

设置默认说明
处理目录content/posts只处理该目录下的 md 文件;留空 = 整个库
自动补全打开/保存/输入时自动补全;关闭后仅手动命令与按钮生效
新建代码块自动带出上次语言新建空代码块自动填上最近一次语言

命令也保留了(不想走自动路径时):

  • 「补全当前笔记的代码块语言」
  • 「补全全库(处理目录内)代码块语言」
  • 「为当前代码块选择语言」

为什么我敢把它做成”自动改文件”#

市面上类似思路的插件不少,但很多是无脑填,或者检测差口气。Code Lang Autofill 把「识别」和「写入」分成了两层:

  • 识别层:自研启发式 + 置信度评分,每个语言一整套特征规则;拿不准就返回”空白”,绝不硬猜。
  • 写入层:接一层”插入点”再落笔,只落在开栏行的反引号后,天然可撤销、幂等。

识别层是纯逻辑、连 Obsidian API 都不碰,可以脱离 UI 直接做单元测试——整套行为(解析、易混语言判别、幂等、低置信度跳过)都用测试钉死了,这也是它有底气”自动改”的原因。

已知边界 & 小提示#

  • 启发式识别不是 100%:太短的块、纯命令输出、两种语言特征太接近时,它选择跳过(安全优先)。这种时候右下角「⌄」点一下就行。
  • 「记住上次语言」在”连续写同语言”的场景很好用;但如果刚写完 Python 就往新块里贴了一段 SQL,新块会被先标成 python——注意一下,用「⌄」一键改回来即可,代价很小。

项目#

如果你也经常为代码块没有语言标签而烦恼,装上试试,从此 ``` 后面的语言,基本不用自己打了。

评论区

[ 标签 ]
# AI5# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot2# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# CloudFlare2# Cloudflare1# CloudFlare-ImgBed1# coc3# CSS6# DeepSeek3# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP2# Java23# java13# JavaScript5# JDBC3# JSON1# JUnit1# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL6# MySql1# NapCat1# obsidian1# Obsidian3# OpenCode4# ORM1# PathVariable1# PicGo1# py5# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Svelte2# TailwindCSS1# Telegram2# Tlias2# Vercel1# Vue7# Waline3# WebDAV1# Web基础6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档9# 写作1# 刷步数1# 前端32# 动态1# 动漫1# 单词2# 博客6# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床4# 地图1# 备份1# 奇思妙想1# 存储1# 学习方法1# 宝塔面板3# 宝宝9# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 影视1# 微信1# 性能优化2# 总结1# 想法12# 感悟9# 指南1# 插件4# 故障排除1# 效率工具2# 教程7# 数据库10# 斩神1# 日常66# 日志框架1# 朋友圈1# 朱元璋1# 模板1# 测试1# 游戏1# 生活迁移1# 电影2# 碎碎念1# 视觉识别1# 网络教室1# 羊毛2# 脚本1# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录1# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载1# 运动1# 部落冲突1# 配置1# 随机图1# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]
工具