mirror of
https://github.com/moyf/easy-copy.git
synced 2026-07-22 05:43:47 +00:00
12 KiB
12 KiB
Changelog
All notable changes to Easy Copy will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.7.1] - 2026-05-28
✨ New Features
- Display name regex replacement (closes #37): added a "Display name: Regex replacement" option under Special copy format options. When enabled, a find-and-replace (with full regex support including capture groups like
$1) is applied to the display text of copied heading/note links. Useful for stripping leading numbers (e.g.^\d+\.\s*) or other prefixes from headings.
中文说明(点击展开)
✨ 新功能
- 显示名称正则替换(修复 #37):在「特殊复制格式选项」中新增「显示名称:正则替换」选项。启用后,可对复制的标题/笔记链接的显示文本进行正则查找替换,支持
$1等捕获组引用。适合去除标题前的序号(如^\d+\.\s*)等场景。
[1.7.0] - 2026-05-26
✨ Improvements
- Code block detection — innermost block semantics: when the cursor is inside nested fenced code blocks (e.g. a ```````` block wrapping a
```block), the command now copies the innermost block the cursor is in, rather than the outermost. Placing the cursor on an inner fence line (which belongs to the outer block's content) correctly returns the outer block.
🔧 Maintenance
- Settings tab: replace
async/awaitwithvoidin allonChangehandlers, following the Obsidian plugin coding guidelines - Settings tab: apply SettingGroup grouping updates
- package.json: fix
namefield fromobsidian-sample-plugintoeasy-copy
中文说明(点击展开)
✨ 改进
- 代码块检测——最内层语义:光标在嵌套代码块内时(如 ```````` 包裹
```),智能复制现在复制最内层的代码块,而不是最外层。光标停在内层围栏行上(属于外层块的内容)时,则正确返回外层块。
🔧 维护
- 设置页:将所有
onChange回调中的async/await改为void,符合 Obsidian 插件编码规范 - 设置页:更新 SettingGroup 分组
- package.json:修正
name字段,从obsidian-sample-plugin更正为easy-copy
[1.6.5] - 2026-05-26
🐛 Bug Fixes
- Code block detection: fix false positive when cursor is on a heading/paragraph between two fenced code blocks. The old implementation searched upward for the nearest
```line without distinguishing opening from closing fences — a closing fence of the previous block was mistakenly treated as an opening fence. - Nested fence support: the detector now correctly handles fences of different lengths (e.g.
```` wrapping```). Per CommonMark spec, a closing fence must be at least as long as its opening fence, so a shorter inner fence is treated as content, not as a closing fence.
🧪 Tests
- Extract core detection logic into a pure function
detectCodeBlockFromLinesinsrc/codeBlockDetect.ts, making it independently testable - Add 37 unit tests covering: the reported bug scenario, nested fences, unclosed blocks, all
CodeBlockBehaviormodes, and fence-line edge cases
中文说明(点击展开)
🐛 Bug 修复
- 代码块检测误判:修复了光标在两个代码块之间的标题行或段落时,被错误识别为「在代码块内」的问题。原实现向上搜索第一个
```行时,无法区分开始围栏和结束围栏,导致上方代码块的结束围栏被当成开始围栏。 - 嵌套围栏支持:检测逻辑现在正确处理不同长度的嵌套围栏(如
```` 包裹```)。依照 CommonMark 规范,结束围栏长度必须 ≥ 开始围栏,较短的内层围栏视为内容行而非结束围栏。
🧪 测试
- 将核心检测逻辑提取为纯函数
detectCodeBlockFromLines(位于src/codeBlockDetect.ts),使其可独立进行单元测试 - 新增 37 个单元测试,覆盖:问题复现场景、嵌套围栏、未闭合块、所有
CodeBlockBehavior模式、围栏行边界情况
[1.6.4] - 2026-05-15
🔧 Maintenance
- Updated pnpm lockfile after removing
builtin-modulesanddotenvdependencies
中文说明(点击展开)
🔧 维护
- 移除
builtin-modules和dotenv依赖后同步更新 pnpm lockfile
[1.6.3] - 2026-05-15
🔧 Maintenance
- Updated pnpm lockfile after removing
builtin-modulesanddotenvdependencies
中文说明(点击展开)
🔧 维护
- 移除
builtin-modules和dotenv依赖后同步更新 pnpm lockfile
[1.6.2] - 2026-05-15
🔧 Maintenance
- Added GitHub artifact attestations for
main.jsandstyles.cssrelease assets - Fixed all Obsidian plugin linter warnings.
中文说明(点击展开)
🔧 维护
- 为 release 产物
main.js和styles.css添加 GitHub Artifact Attestation(加密溯源证明) - 修复所有 Obsidian 插件 linter 警告
1.6.1 - 2026-05-12
✨ Added
- Code block copy: When the cursor is inside a fenced code block (
```), the smart copy command now copies the block content directly — no more accidentally triggering block ID generation. - Code block copy behavior setting: A new "Code Block" settings group lets you choose what happens when copying from inside a code block:
- Copy plain text (default) — copies the code content without the surrounding
```fence lines - Copy code block (with fences) — copies the full block including the opening
```langand closing```lines - Generate block link — falls through to the existing block ID generation behavior (same as before this feature)
- Disabled — skips code block detection entirely
- Copy plain text (default) — copies the code content without the surrounding
中文说明(点击展开)
✨ 新增
- 复制代码块:当光标位于代码块(
```)内时,智能复制命令现在会直接复制代码块内容,不再误触发块ID生成。 - 代码块复制行为设置:新增「代码块」设置分组,可自定义在代码块内按下智能复制时的行为:
- 复制纯文本(默认)—— 复制代码内容,不含前后的
```围栏行 - 复制代码块(含
```) —— 复制完整代码块,包括开头的```lang和结尾的```行 - 生成块链接 —— 沿用原有的块ID生成逻辑(与此功能上线前行为一致)
- 禁用 —— 跳过代码块检测,不做任何特殊处理
- 复制纯文本(默认)—— 复制代码内容,不含前后的
1.6.0 - 2026-05-09
✨ Added
- Paste-time link path resolution: When "Resolve link path on paste" is enabled, Easy Copy regenerates link paths based on the destination file's location at paste time.
- Under "Follow Obsidian settings", uses your vault's configured path style (shortest / relative / absolute)
- Under explicit Wiki/Markdown format, uses shortest-unique paths only
- Same-file heading paste simplifies automatically (e.g.
[[#Setup]]instead of[[MyProject#Setup]])
🐛 Fixed
simplifiedHeadingToNoteLinksetting now correctly controls link simplification (previously had no effect in some configurations)
♻️ Changed
- Extracted
copyMetadata.tsandpasteResolution.tsas pure-function modules with full test coverage - Added 98 new tests (total: 184)
中文说明(点击展开)
✨ 新增
- 粘贴时解析链接路径:启用「粘贴时解析链接路径」后,Easy Copy 会在粘贴时根据目标文件位置重新生成链接路径。
- 使用「跟随 Obsidian 设置」时,沿用软件设置中的路径风格(最短/相对/绝对)
- 使用明确的 Wiki/Markdown 格式时,仅使用最短唯一路径
- 同一文件内粘贴标题自动简化(如
[[#Setup]]而非[[MyProject#Setup]])
🐛 修复
simplifiedHeadingToNoteLink设置现在正确控制链接简化逻辑(之前在某些配置下无效)
♻️ 变更
- 提取
copyMetadata.ts和pasteResolution.ts为纯函数模块,完整测试覆盖 - 新增 98 个测试(总计 184 个)
1.5.3 - 2026-04-22
✨ Added
- Strict heading match option: When disabled (default), filenames containing the heading as a substring will also be simplified. When enabled, only exact filename-heading matches are simplified.
🐛 Fixed
- Heading links now correctly handle special characters (
#,|,^,:,%%,[[,]]) — matching Obsidian's autocomplete behavior - Fixed false-positive note-link simplification when filename contains heading as substring (e.g. "JavaScript" filename + "Java" heading)
♻️ Changed
- Extracted link-building logic into pure functions; added vitest with 86 tests
中文说明(点击展开)
✨ 新增
- 严格匹配选项:关闭时(默认),文件名包含标题子串也会简化(如 "260422_note" 匹配标题 "note");开启时,仅完全匹配才会简化。
🐛 修复
- 标题链接现在正确处理特殊字符(
#、|、^、:、%%、[[、]])——与 Obsidian 自动补全行为一致 - 修复文件名包含标题子串时的误判(如文件名 "JavaScript" + 标题 "Java" 不再被错误简化)
♻️ 变更
- 将链接构建逻辑提取为纯函数,新增 vitest 测试框架,86 个测试用例
1.5.2 - 2026-04-02
✨ Added
- Wiki link copy: When the cursor is inside a
[[wikilink]], copy the link text (with optional[[ ]]brackets via setting) - Callout copy: When the cursor is inside a callout (
>block), copy the callout content as plain text; configurable priority vs. block ID generation
🐛 Fixed
- Inline code, bold, highlight, italic, strikethrough, inline LaTeX detection improvements
中文说明(点击展开)
✨ 新增
- Wiki 链接复制:光标在
[[双链]]内时,复制链接文本(可通过设置选择是否保留[[ ]]括号) - 标注复制:光标在标注(
>块)内时,复制标注纯文本内容;可配置与块ID生成的优先级
🐛 修复
- 行内代码、加粗、高亮、斜体、删除线、行内LaTeX 检测改进
1.5.1 - 2025-12-11
✨ Added
- Frontmatter display text: Use a note property (e.g.
title) as the display text for note links - Auto block display text: Automatically generate display text for block ID links, with configurable word/character limits
中文说明(点击展开)
✨ 新增
- Frontmatter 显示文本:使用笔记属性(如
title)作为笔记链接的显示文本 - 块链接自动显示文本:自动为块ID链接生成显示文本,可配置单词数/字符数限制
1.5.0 - 2025-11-05
✨ Added
- Block ID generation: Automatically insert a block ID (
^xxxx) and copy the block link when there is no other copyable content at the cursor - Manual block ID input: Optionally prompt for a custom block ID via modal
- Block ID insert position: Choose between end-of-block or next-line insertion
- Extra commands: "Copy current file link" and "Generate & copy current block link" commands added to command palette
中文说明(点击展开)
✨ 新增
- 块ID生成:当光标处没有其他可复制内容时,自动插入块ID(
^xxxx)并复制块链接 - 手动输入块ID:可通过弹窗手动输入自定义块ID
- 块ID插入位置:可选择在块末尾或下一行插入
- 拓展命令:命令面板新增「复制当前文件链接」和「生成并复制当前块链接」命令