Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Punctilious

bozhangbozhang24 downloads

统一 Markdown 标点格式:中文标点转英文标点,并在中英文与数字之间自动补空格,链接 URL 自动豁免。

Add to Obsidian
  • Overview
  • Scorecard
  • Updates3

Normalize Markdown punctuation: convert Chinese punctuation to English punctuation, add spaces between Chinese and English/digits, and leave URLs inside links untouched.

English | 中文

Features

  • Spaces around numbers: 共100元 → 共 100 元
  • Spaces between Chinese and English: 使用TypeScript开发 → 使用 TypeScript 开发
  • Chinese punctuation to English: 你好,世界。 → 你好, 世界.
  • Automatic spacing after converted punctuation
  • Ideographic comma to comma: 苹果、香蕉 → 苹果, 香蕉
  • Dashes and book title marks are preserved: ——, 《》
  • URLs in links are exempt: addresses inside Markdown links, images, Wiki links and bare URLs are never modified
  • Safe zones are protected: code blocks, inline code, math, HTML tags and comments, YAML frontmatter
  • Two scopes: format the whole note, or just the selected text

Installation

Manual installation

  1. Download main.js, manifest.json and styles.css from the latest release
  2. Create a punctilious folder inside your vault's .obsidian/plugins/
  3. Copy the downloaded files into that folder
  4. Reload Obsidian and enable the plugin in Settings → Community plugins

Usage

  1. Open a Markdown note
  2. Press Ctrl/Cmd + P to open the command palette
  3. Run one of the following commands:
Command Description
Normalize punctuation in current note Formats the entire active note
Normalize punctuation in selection Formats only the selected text; formats the whole note when nothing is selected

Formatting rules

1. Spaces around numbers

Before After
共100元 共 100 元
总共3个苹果和12个梨 总共 3 个苹果和 12 个梨
2026年是重要的一年 2026 年是重要的一年
- 2026年计划 - 2026 年计划

No leading space is added when the number sits at the beginning of a paragraph or a line.

2. Spaces between Chinese and English

Before After
使用TypeScript开发 使用 TypeScript 开发
这是一个Obsidian插件 这是一个 Obsidian 插件

No leading space is added when the English text sits at the beginning of a paragraph or a line. No space is inserted between English and digits (iPhone15, v1.2.3 stay as they are).

Existing spaces are never duplicated: 使用 TypeScript 开发 stays unchanged, and runs of multiple spaces collapse into one. When only one side has a space, just the missing side is filled in (for example 共 100元 → 共 100 元).

3. Chinese punctuation to English punctuation

A space is added after the converted punctuation. Opening brackets and quotes get the space before them instead, and any redundant space before a closing mark is removed.

Before After
你好,世界。今天怎么样? 你好, 世界. 今天怎么样?
第一项;第二项:第三项 第一项; 第二项: 第三项
我(你)好 我 (你) 好
中文(English)结尾 中文 (English) 结尾
他说:“你好!” 他说: "你好!"
等等……还有 等等... 还有

Full conversion table:

Chinese English
, ,
。 .
、 , (can be disabled in settings)
; ;
: :
? ?
! !
( ) ( / )
【 】 [ / ]
〔 〕, 〖 〗 [ / ]
〈 〉 < / >
“ ”, 「 」 " / "
‘ ’, 『 』 ' / '
~ ~
…… ...
—— preserved
《 》 preserved

4. URLs in links are exempt

URLs are never modified and never get extra spaces:

参见[链接](https://example.com/docs?a=1&b=2#中文)与[[笔记/2026计划|我的计划]]。

becomes:

参见[链接](https://example.com/docs?a=1&b=2#中文)与[[笔记/2026计划|我的计划]].

Exempt content also includes image URLs, reference-style link definitions, <https://...> autolinks, bare URLs and Wiki link targets.

5. Zones preserved as-is

  • YAML frontmatter
  • Fenced code blocks (``` / ~~~) and inline code (`)
  • Math ($$...$$ / $...$)
  • HTML tags and HTML comments
  • Obsidian comments (%%...%%)
  • Markdown block markers (indentation, blockquotes, headings, lists, task lists, footnote definitions) and hard line breaks (two trailing spaces)

Settings

Open Settings → Punctilious to tune the rules.

Setting Default Description
Add spaces between Chinese and English/digits On No space is added at the start of a line
Convert Chinese punctuation to English On Dashes and book title marks are always preserved
Add a space after punctuation On Adds a space after the converted punctuation
Convert ideographic comma to comma On Turn off to keep 、 as-is
Skip code blocks and math On Code and math are left untouched
Skip URLs in links On Link addresses are left untouched
Skip YAML frontmatter On Frontmatter is left untouched
Show completion notice On Shows a notice when formatting finishes

Requirements

  • Obsidian v1.6.6 or later
  • Works on desktop and mobile

Security & privacy

  • Fully offline: no network requests at all
  • Only reads and writes the note you are working on; never scans or uploads vault content
  • No telemetry and no user data collection
  • All settings are stored locally in data.json

Development

# Install dependencies
npm install

# Build in watch mode
npm run dev

# Production build
npm run build

# Lint
npm run lint

Continuous integration

The project ships with two GitHub Actions workflows:

Workflow Trigger Description
.github/workflows/lint.yml Push and pull request on any branch Runs npm ci, npm run build and npm run lint on Node.js 20.x / 22.x
.github/workflows/release.yml Tag push Builds the plugin and uploads main.js, manifest.json, styles.css and a zip archive as release assets

Releasing a new version

npm version runs version-bump.mjs, which keeps manifest.json and versions.json in sync:

npm version patch   # or minor / major
git push --follow-tags

Pushing the tag triggers the release workflow. The tag must match the version in manifest.json exactly (no leading v).

License

MIT

HealthExcellent
ReviewSatisfactory
About
Normalize Markdown punctuation and spacing for mixed Chinese/English content. Convert Chinese punctuation to English equivalents, insert spaces between Chinese and Latin text or numbers, and preserve dashes, book-title marks, URLs (links/images/wiki), code, math, HTML, comments, and YAML frontmatter. Apply to whole note or selection.
FormattingMarkdownLanguages
Details
Current version
1.0.3
Last updated
2 weeks ago
Created
2 weeks ago
Updates
3 releases
Downloads
24
Compatible with
Obsidian 1.13.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
bozhangbozhangmrelvin
GitHubmrelvin
  1. Community
  2. Plugins
  3. Formatting
  4. Punctilious

Related plugins

Linter

Format and style your notes. Linter can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular Markdown contents like list, italics, and bold styles; and more with the use of custom rule options.

Image Captions

Add captions to images with inline Markdown and link support. The caption format is compatible with the Commonmark spec and other Markdown applications.

Blur

Create obfuscated blocks of text.

Columns

Create columns in Markdown.

Paste Reformatter

Reformats pasted text for precise control.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Admonition

Admonition block-styled content.

Editing Toolbar

The Editing Toolbar is modified from cMenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.

Consistent Attachments and Links

Move note attachments and update links automatically.

Outliner

Work with your lists like in Workflowy or Roam Research.