Skip to content

Latest commit

 

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

English · 中文

MarkPilot · 万可百律

AI 时代,全新定义 Markdown 编辑器——万有可能,一致百「律」。

开源项目,万众铸造。程序与插件本体免费,想魔改的源码另行授权。

version platform license

MarkPilot 是一款 AI 原生的 Markdown 编辑器:你在写上一句的时候,它已经在替你想下一句;你排版的一撇一捺之间,藏着一套正经的中文排版引擎。同一套编辑内核,两种工作形态——既能作为 Windows 桌面应用开箱即用,也能作为插件装进 VS Code、Trae 等 AI IDE。

MarkPilot:中西文混排与公式编辑

窄窗口、密集换行、中西文混排与实时公式——宋体-朙主题,中西文之间自动留白。

和 Typora 比,快多少?(实测)

同一台电脑、同一个窗口大小、同一份「中文 + 公式」素材,两边都按最大化窗口打开;每一项都跑多次取中位值,并且用两套互相独立的测法交叉验证过,结论一致。

场景 实测
打开小文档(1.7 KB) MarkPilot 快约 0.2 秒(0.51 秒 vs 0.71 秒)
打开中文档(67 KB) MarkPilot 快约 0.14 秒(0.61 秒 vs 0.75 秒)
打开大文档(240 KB) 几乎一样快(0.91 秒 vs 0.90 秒)
双击文件后窗口弹出来的速度 MarkPilot 更快(0.29 秒 vs 0.33 秒)
在大文档末尾点开一个公式、直接进源码编辑 MarkPilot 快 6.5 倍(0.024 秒 vs 0.156 秒)

对照对象是同期最新版 Typora(1.14.10),MarkPilot 用的 Windows 桌面版 2.0.18。数字是 2026-09-10 在这台机器上的实测:换机器、换文档绝对值都会变,"打开文档不落后、点公式编辑快一个量级"这个结论在同一台机器上是稳定的。

界面截图

点符号就跳到源码——点公式里的 ω,光标落在 \omega 的 o 上 下标也一样准——点 f_n 的 n,光标就落在源码那个 n 上
点 ω 定位源码 点下标定位源码
界面透明度——弹窗与工具栏半透明,各有 10%–100% 的滑块 排版——衬线宋体、中西文自动间距、整段最优断行
半透明右键菜单 密集换行的正文排版

六个 Typora 给不了的重磅能力

✦ AI 行内补全

真正的行内续写:它知道你正在写哪个章节、前后文是什么、是不是在公式环境里,光标后面直接浮现灰色预览,Tab 采纳。双引擎设计——大模型续写(DeepSeek / 智谱 GLM,填自己的 Key 即用)加本地规则补全(公式、模板、路径),断网或没配 Key 也照样补。你的 API Key 只存在本机加密存储,不上传、不打进安装包。

✦ 数学公式的精准映射

编辑体验沿用 Typora 的路子:平时看到的是渲染好的公式,光标走近就亮出局部源码,即改即预览。MarkPilot 在这层交互之上,把渲染结果与源码挂了钩——点击公式上的任意符号,光标就精准落在生成它的那段源码处;反过来,源码里动一个字符,对应元素立刻刷新。公式嵌在表格单元格里、或层层嵌套,这层映射都不丢;原地点开编辑、精确撤销重做。写数学文档时,公式不再是"渲染完就碰不得的图片",而是可编辑、可回退的活内容。

✦ 插件化:编辑器进驻 AI IDE

整个编辑内核打包成标准扩展:在 VS Code 或 Trae 里装上(现在直接在扩展商店搜 MarkPilot 即可,见「下载」),活动栏立刻多出一个 Markdown 工作台——完整编辑器、文档大纲树、AI 补全,全部在 IDE 里原生运行。在 AI IDE 里写文档,不用再切出去。

✦ 大文件不卡顿

分片后台渲染加源码缓存复用:打开大文档先建缓存,之后输入、撤销、大纲跳转都保持流畅,公式再多的长文也不会滚不动。内部基准测试中,正文编辑的 CPU 开销下降 57%–87%。

✦ 印刷级中文排版

这是 2.0 系列打磨最狠的一块,也是中文名「万可百律」里那个「律」字的来历——排版的韵律:

  • 中西文混排自动间距:中文与西文、数字之间自动留出呼吸空隙,公式与代码内部的像素布局不受干扰;
  • 宋体系衬线双主题(宋体-朙 / 宋体-暗):正文中文宋体、西文 Georgia 双衬线,细笔画描边、暗色表格不再陷成黑条纹,中文斜体以楷体呈现——把屏幕当"纸"来排;
  • 1280px 阅读版心:宽屏不再一行读到脖子断;
  • 导出采用 TeX 同源的 Knuth–Plass 整段最优断行:不是逐行贪心塞满,而是整段代价最优——TeX 排了四十年的数学论文,用的就是它。

✦ 界面透明度可调

每一个弹窗、右键菜单与工具栏默认都是半透明的,而且可以自己调:设置里的「界面透明度」给弹窗与工具栏各一个 10%–100% 的滑块(70% 是个不错的起点)。是"可调"而不是"写死"——想看得清就调实,想要玻璃感就调透;正文从半透明的菜单后面透出来,但不会糊成一片。

还有这些

  • 即时渲染 / 所见即所得 / 源码三种模式,随时切换
  • 侧栏大纲树,点击标题直达正文
  • 智能表格编辑,表格里写公式也没问题
  • Mermaid 图表、上百款代码高亮主题、图片粘贴自动归档
  • 悬浮工具栏岛:自动收纳,点空白处即落笔
  • Word / Excel / PPT 迁移导出,公式以可编辑的 OMML 直达 DOCX,无需 Pandoc
  • 明暗主题、阅读调色盘、Ctrl+滚轮缩放
  • 弹窗 / 右键菜单 / 工具栏的透明度独立可调(10%–100%)
  • Windows 安装版 + 免安装便携版

MarkPilot vs Typora

MarkPilot Typora
AI 行内补全 ✅ 大模型 + 本地双引擎
数学公式精准映射(表格内、嵌套可编辑) 部分
印刷级中文排版(中西文间距 / 衬线宋体 / Knuth–Plass 断行导出) 部分
大文档性能优化 ✅ 分片渲染 + 缓存
装进 VS Code / Trae 等 AI IDE ✅ 插件形态 ❌ 仅独立应用
弹窗与工具条透明度可调 ✅ 10%–100%
价格 免费 $14.99

下载

IDE 插件(现在可直接在扩展商店里搜索安装):

  • VS Code:扩展视图搜 MarkPilot → 安装(市场 ID Jinxi.markpilot)→ https://marketplace.visualstudio.com/items?itemName=Jinxi.markpilot
  • Trae / Cursor / VSCodium 等:在 Open VSX 上(ID jinxi.markpilot)→ https://open-vsx.org/extension/jinxi/markpilot
    • 如果你的 IDE 里一时搜不到,用下面的手动方式装上即可
  • 手动安装markpilot-x.x.x.vsix
    • VS Code / Trae:扩展视图 → 菜单 →「从 VSIX 安装」→ 选中下载的 vsix → 重载窗口
    • 装好后活动栏出现 MarkPilot 图标,点开即用;AI 补全在设置里填自己的 API Key

Windows 桌面版:到 GitHub 仓库的 Releases 页取最新版本

  • markpilot-Setup-x.x.x.exe(安装版)或 markpilot-vx.x.x-portable.exe(便携版,免安装)

v2.1.29 更新

  • 在行尾按 Shift+Enter 换行、接着用中文输入法打字:光标会跳回上一行、字插进段落开头(笔记第一行标题下面那一句"路边等间隔种树…"就是这么被顶掉的)。现在字老老实实落在新行上。
  • 行内公式(Ctrl+Shift+E)后面接着打字:用右方向键走出公式再输入,字以前会被写进公式源码里、光标跟着跳回公式内;现在落在公式外面。
  • 方向键碰到行内公式不再整块跳过去,而是打开公式源码编辑区、把光标送进公式里(与 Typora 的做法一致);在源码里再按方向键就一个字符一个字符地走,走到两头自然出来。
  • 公式行尾按 Shift+Enter 换行,接着用输入法打字:换行与字都落在公式外面,不会被 $ 吸走。

v2.1.28 更新

  • 工具栏能收起来了:点工具栏最右边那个「收起」按钮,整条工具栏收成右上角一个小按钮,正文跟着上移、把这块空间让出来;再点一下原样展开。收起状态会记住,下次打开还是收着的。
  • 窗口缩窄之后,标题左边那个 H1 / H2 级别角标不再被挤到写作区边上——它左边始终留着空白,与右侧一样不贴边。

v2.1.27 更新

  • 长文档撤销之后,被跳过渲染的部分会丢掉记下来的高度,文档总高被抬到真实值的 8 倍,滚动条比例与「上次读到哪里」跟着漂,而且不会自己恢复。现在会当场补回,几乎察觉不到。
  • 长文档打字时,被重建的那一段此前会悄悄退回默认高度(滚动条随之轻微失真),现在会随即补齐。

v2.1.26 更新

  • 可以导入你自己的 Typora 主题:「主题」里选整套主题的 CSS(可多选,@import 的子文件一起选)或直接粘贴;导入即生效,随时停用、删除。
  • 主题自带的字体文件与图片不会跟过来(相对路径的引用会被拦掉,不让编辑器去请求不存在的文件),用主题自带字体的地方退回系统字体。
  • 主题里 @media:has()@import、主题自己定义的配色变量都照常生效;只作用于正文,工具栏与菜单保持 MarkPilot 自己的体系。
  • 导入后给一行统计:生效多少条规则、丢弃多少条、多少本地字体没加载——一眼知道和 Typora 里的差别在哪。
  • 修一个界面缺陷:导入的主题一多,主题对话框会长过窗口、底部按钮点不到。

v2.1.25 更新

  • 标题左边点得住:点开标题露出 # 之后,点在井号左边的空白处,光标就停在井号左边,不再被弹到标题文字前面;井号不闪、整行不推。
  • 块首退格不再吃掉井号:光标在 # 之前按退格=块首删除(上一段是正文就合并上去;上一段是表格/代码块/公式时什么也不做),不会再出现井号被删、标题降级成普通段落。
  • 浮层菜单收得干净:编辑模式、标题这类菜单点开后,指针一离开工具栏就收起来,不再压着正文不走。
  • 桌面版工具栏去掉「使用vscode默认编辑器」入口(桌面端编辑能力都在本程序里);插件版保留,在 VS Code 里它就是回到 VS Code 自己的文本编辑器。
  • ⋮ 菜单里的「代码块主题预览」「内容主题预览」已移除(点了没反应);编辑器配色用工具栏一级的「主题」与「阅读调色盘」。

v2.1.24 更新

  • 地址怎么写都能用https://api.deepseek.com.../v1.../anthropic 都指向同一个端点,不用再对着服务商文档拼路径;密钥按平台保存,改模型名不会把密钥弄丢。
  • 换地址不再顺手关掉 AI,而是告诉你「协议按地址判定」以及「这个地址要填一次密钥,旧地址的密钥仍在」。
  • 出问题时能自己排查:把服务商返回的原文与实际请求地址一起显示出来。

v2.1.23 更新

  • AI 建议框可以滚了:建议很长时在框内直接滚动查看,窗口会按光标上下的空间自动放大,不用拉着看半句;点一下框不会消失、也不会把光标挪走,读完再按 Tab 接受,Esc 取消。
  • 补全配置完全由你决定:不再预设任何服务商与模型。粘贴 Claude Code / cc-switch 的 settings.json、一段 JSON 或 KEY=VALUE 就能配好;不用的模型配置随时删除,密钥一并清掉。
  • 出问题不再只报一句「暂无建议」:会区分密钥没填、地址不对、模型只回了思考内容、生成被截断,并附上实际请求地址。
  • 公开版与自用版两条发行线合并,只此一个发布产物;密钥始终只存在你自己机器的加密存储里。

v2.1.22 更新

  • 行内公式的浮框点一下不再闪了。上一版把"点浮框=在源码里落光标"接上之后,露出另一个老毛病:鼠标按下的那段时间里,正在编辑的这条公式会被从视觉上压回渲染态——源码当场藏起来、浮框摊回行内、段落重排,松手又弹回来,一次点击闪一下(逐帧实测:按住 250ms 的 43 帧里有 16 帧源码是 "display:none"、浮框是 "position:static",而 "--expand" 类一次都没变、KaTeX 一次都没重建——所以只看类是看不见它的)。现在按下已经展开的那条公式时把它排除在那组规则之外:按下期间它保持展开(源码照旧看得见、浮框照旧浮着),松手照常。折叠态公式按下去仍然照旧(拖拽经过时压回渲染态那套手感不变)。
  • 源码跨行时浮框不再被挤到上一行行尾。行内公式的源码太长、一行的宽度装不下时,源码会折到下一行,而浮框的落位基准过去是"节点的第一个行盒片段"——也就是上一行行尾那个 $:浮框于是跑到右边、还挂在上一行下面(你截图里的 f^*\in[f^{\inf},f^{\sup}] 就是这个形状)。现在浮框的落位基准改成源码自己(CSS 锚点定位),跨行时也贴着源码的左边界、挂在源码下方 4px。

修复(v2.1.22)

  • 点行内公式的预渲染浮框(或它的源码)时整块闪一下:按下期间这条公式被从视觉上压回渲染态,松手才恢复。
  • 行内公式源码跨行时,预渲染浮框被挤到上一行行尾(落位基准取了"第一个行盒片段"而不是源码)。

v2.1.21 更新

  • 行内公式的预渲染浮框里,点哪儿光标就落在哪儿了。编辑一条行内公式时,它的渲染结果会浮在源码下方那片框里——以前在这片框里点,光标几乎总是跳到公式源码的最前面(点中段也一样),点在框的内边距上更会把这条公式当场收回去、松手又弹回来,一次点击跳两下。现在这片框与"点折叠态的渲染结果"走同一条像素→光标映射:点在哪个字形上,光标就落到源码里那个字符的位置;点最后一个字形按行末口径落到公式末尾;框的内边距上点一下按"离得最近的那个字形"算。按下期间公式不会被收回去(逐帧采样:零个"收起"帧)。
  • 映射复用同一份数据:渲染结果上的源码映射属性本来就在(KaTeX 输出时带上),这一版只是把按下那一刻的落点按同一套规则算出来、直接把光标放进源码,不再交给浏览器自己夹(浏览器会把光标解进 KaTeX 的子树里,所以读出的是偏移 0)。
  • ✦ 多击(双击选词)与按住 Shift/Ctrl 的按下照旧交给浏览器;从浮框里按住往右拖,仍然起得出选区。

修复(v2.1.21)

  • 行内公式的预渲染浮框里点一下:光标跑到公式源码的最前面(点中段、点右侧都是 0)。
  • 点浮框的内边距:公式被当场收回折叠态、松手再弹回来(一次点击两次跳动)。

v2.1.20 更新

  • 展开态块公式上"点一下"不再整块闪了。在展开预渲染、展开代码编辑的状态下,无论点代码区还是点渲染区,块公式都会当场塌回折叠态、再弹回展开态(块盒高度 145→119→145,差的 26px 正是源码行那一条)——那就是你看到的"整块闪烁",而它与文字一个字都没改过没关系。现在改成:鼠标按下期间把已经展开的块公式原样冻住(既不展开、也不收回),松手后照常按"光标在不在公式里"收放。
  • 渲染结果不再被重建:单击(无文字变动)期间 KaTeX 一次都不重跑,预渲染子树逐字节不变、首个子节点还是原来那个,公式源码也逐字节不变。键盘移动与打字的行为一点没动(它们本来就不闪)。

修复(v2.1.20)

  • 展开态块公式上单击一次(代码区或渲染区)导致整块重排/闪烁一次:按下时我们自己把 --expand 摘掉、松手后 Vditor 又装回来,中间隔着若干帧,屏幕上就是块公式塌下去又弹回来。

v2.1.19 更新

  • 公式命令补全的排序策略重做了(按你说的"去查成熟方案":参照 VS Code 补全的排序模型——匹配质量决定次序,声明顺序只在"匹配得一样好"时打破平局)。现在的档位是:完全命中 → 前缀命中(同档内按"键入部分占命令名的比例",更贴近的靠前)→ 同族兄弟(插在强命中之后,同族内按"与键入那条的最长公共前缀"降序)→ 说明命中 → 子序列模糊命中。所以:敲 \mathbb\mathbb\mathbf\mathcal\mathrm\mathscr\mathfrak…;敲 \frac\frac\sqrt\dfrac\tfrac\cfrac;敲 \lr → 前缀命中之后跟着 \leftrightarrow\Leftrightarrow(模糊命中兜底)。
  • "公式里出现过"不再跨档提权:旧实现把"本公式里出现过"当加分(+3)对所有条目生效,于是在一个已经写着 \int/\mathbf 的公式里敲 \\int\in\in\int 的子串)会被顶到最前面。现在它只做同档内的次级键——敲一个 \ 时永远是那 12 条常用命令(\frac\sqrt\sum\int → …)。
  • ✦ 命令表补上 \mathscr/\mathfrak/\mathsf/\mathtt/\mathit/\boldsymbol/\mathnormal/\operatorname 等(42 → 215 条,13 个分组),候选个数自适应(强命中不足 4 条才补同族,最多 12 条)。

修复(v2.1.19)

  • 在含 \int/\mathbf 的公式里敲 \\int/\in 被顶到候选最前面,常用命令的次序被打乱。
  • \frac\sqrt 从候选里消失(旧的"命中够 4 条就不补同族"把模糊命中也算成了命中)。

修复(v2.1.18)

  • 公式命令候选的说明栏漏出了「同一类(字体)」这类分组/工程字眼:说明栏现在只放命令自己的中文解释(同族命令照旧一起给出来,只是不再标注"为什么在这儿")。

v2.1.17 更新

  • 公式命令补全重新变"智能"了:同类命令会一起提示。键入 \mathbb 现在会带出同一族(字体)的 \mathbf\mathcal\mathscr\mathfrak\mathsf\mathtt\mathrm\mathit\boldsymbol\mathnormal\operatorname;键入 \frac 带出 \sqrt/\dfrac/\tfrac/\cfrac;键入 \sum 带出 \prod/\int/\iint/\oint/\lim;键入 \alpha 带出整族希腊字母。同类条目在说明里标着「· 同一类(字体)」,一眼看得出它们为什么在这儿。
  • 候选个数按"这次命中多少"自适应:前缀命中不足 4 条时才补同族兄弟(补到 12 条为止);命中已经很多时一条不补——所以只敲一个 \ 仍然是原来那 12 条常用命令(\frac\sqrt\sum\int …,顺序不变)。命令表也从 42 条扩到 215 条,按"常用 → 分组"排好。
  • 说明一点:公式模板补全一直是离线的。候选来自代码里的静态命令表(render/js/completion-sources.js)与本地匹配,不联网、不调用任何模型;面板在任何宿主/AI 往返之前就画好了。唯一联网的是另一个可选功能——AI 续写(灰字),它需要你自己填 API Key,且公开/无 API 版里那段代码整块不存在。

修复(v2.1.17)

  • 公式命令补全只会给出"键名前缀完全匹配"的那一两条(键入 \mathbb 只有 \mathbb 自己),同族命令(\mathscr/\mathbf …)不再被提示。

v2.1.16 更新

  • 块公式行末的点击口径按你的说明改正了:现在点最后一个字形(左右半边都算)以及它右侧的空白带,光标一律落到这条公式源码的末尾(逗号之后)。上一个版本我理解反了、做成了"停在逗号之前",所以你看还是不对。前面的字形仍然按半格走(左半→它之前、右半→它之后),命令(\sum/\int/\lim)仍然落到反斜杠之后。
  • 图片删除后第一次 Ctrl+Z 就能拿回来(第二种机制):Vditor 在重建文档(setValue)之后自己挂了一次去抖 push,会把"markdown 一个字没变、只是公式重排/reconcile 挪了节点"的状态也推成一条历史,压在删除补丁上面——第一次撤销撞上的就是它(实测在你的原文档里,把图片放在"紧跟块公式"的位置必现)。现在撤销/重做会跳过这种空步(历史记录本身不动)。
  • 从下往上拖拽经过 $$…$$ 块公式时不再高频抖动:2.1.11 修的是行内公式(按下期间只从视觉上压回渲染态),块公式没盖到——它一展开就把源码行插进版面(块盒高度 91↔118),下面的文字整段位移、拖拽端点落到别处,于是来回打转。现在鼠标按着期间不展开块公式,版面全程停在折叠态(实测:--expand 翻转 4 次 → 0 次,块盒高度全程不变)。
  • 补全面板新增"工具栏下沿当天花板":行上方有空间但被工具栏占着时,面板会在这一侧变矮(可滚动),而不是顶到屏幕最上面横跨工具栏。

修复(v2.1.16)

  • 点块公式渲染行的末尾逗号及之后:光标停在逗号之前(应落到逗号之后)。
  • 图片选中删除后要按两次 Ctrl+Z(图片紧跟公式时必现;第二次机制来自 Vditor 自己的去抖 push)。
  • 从下往上拖拽选中经过 $$…$$ 块公式:编辑区高频抖动(向下拖症状较轻)。

v2.1.15 更新

  • 点块公式渲染行的末尾不再"跳过末尾那个逗号":落点过去一律停在字形起点,而一个数字格子在屏幕上宽约 9px——点在它右半边,光标也会停在它前面,看起来就像"光标跑到要点的字符再往前一格"。现在按半格规则走:落在字形左半边停在它之前、右半边停在它之后;公式最后一个字形除外(点它身上仍然停在它之前),所以"点行末"永远停在最后一个字符之前,不会跑到公式外面。命令(\sum/\int/\lim/\frac…)左右半边都落到反斜杠之后,与行内公式的手感一致。
  • 点显示模式的 ∑/∫/lim,光标插到 \ 和后面那个字母之间(以前会落进 \sum_{} 的第一个参数里)。原因:显示模式的大运算符在 KaTeX 里自己没有源码映射(映射挂在外层 mop 上),旧实现退到"离落点最近的映射字形",选中的是下标里的 =。现在落点压在"自己没有映射、但这一层确实画着字"的元素上时,用外层容器的位置;并排除了 KaTeX 的 vlist/strut 空壳(它们会横向盖到相邻字形上,实测有 1px 的坑)。
  • 公式提示栏(补全候选面板)不再盖住公式的预渲染框:面板落位原先只管"不压正在编辑的那一行"和"不压鼠标",现在多一条"不盖预渲染框",且权重排在"能显示更多条目"之前——宁可面板矮一点,也要让你看得见这条公式渲染成什么样。
  • 删除图片只需要一次 Ctrl+Z 了(以前要两次,第一次"什么也不发生")。原因:Vditor 的历史快照带光标位置,"点选图片"这种纯光标移动也被算成一次差异,被我们固化成了一条 markdown 毫无变化的撤销。现在补历史点之前先比 markdown,没变就不推——这条修复对所有走同一路径的操作(剪切/粘贴/表格/图片缩放等)都生效。
  • 删除"顶边已经滚出页面上沿"的图片时,下方文字位置不动、上方内容下移(按你定的规则)。判据是几何(图片盒 top 在可视区上沿之上);补偿量按内容总高的变化量算(图片盒 881px、那一块 getBoundingClientRect 906px、内容总高实际少 920px——按几何算会差 39px,下方文字仍会跳一格)。图片整体在视口里时保持旧行为(下方文字上移一格)。

修复(v2.1.15)

  • 点块公式渲染行的末尾:光标跳过末尾的逗号、落到它再往前一个字符之前(点行末那个数字的右半边必现)。
  • 块公式以 \sum/\int/\lim 这类命令开头时,点那个大符号会把光标插进 \sum_{} / \int_{} 的第一个参数里(行内公式的同一操作是对的)。
  • 公式提示栏会盖住正在编辑那条公式的预渲染框,看不见编辑效果。
  • 选中图片删除后要按两次 Ctrl+Z 才能回退(第一次按下去什么也不发生)。
  • 图片顶边已经滚出页面上沿时删除它,下方文字整体往上一跳(阅读位置丢失)。

v2.1.14 更新

  • 紧贴块公式的正文,点字的上半截不再把光标扔到行首(用户报:"点任何字的偏上都会触发,应该是点击在行内相对高度判定的问题"——这条诊断完全正确)。真凶是"贴着折叠块公式的空白留白"翻译逻辑:它的纵向容差是公式盒 ±10px,而上一块的块公式与下一段正文的盒子是紧贴的(实测块公式 y=257..387、正文 y=387..412),于是"正文第一行字的上半截"整段被当成留白,光标被搬到公式之后的插入点 = 这一行的最开始。现在留白判定加一条:落点压在别的块的盒子里就是正文,交回给浏览器(Chromium 自己的答案一直是正确的)。实测:同一行 162 次点击里,"上缘+2"的偏离从 27/29 降到 2/30。
  • ✦ 记录一条方法教训:判定"点击落点 → 光标位置"的探针,纵向必须取上缘/中心/下缘三点;前几轮只点字中心,恰好把这个 bug 整个盖住了。

修复(v2.1.14)

  • 点紧贴块公式的正文里任何字的上半截:光标被搬到该块公式之后的插入点(表现为"跑到这一行的最开始")。

追问「为何不能紧贴公式插入?」(v2.1.14 补充)

没有拿走。 紧贴公式的那条路原样保留,并写成了断言:文档首块公式盒子上方 5px 点一下,光标仍然落在紧贴这条公式之前(实测 (编辑器根, 0))。改掉的只有一类——落点其实压在另一段正文那一行的盒子里。在你的文档里块公式与下一段正文是紧贴的(实测间隙 0px),那一带没有空白像素,点它本来就该把光标放进正文;旧实现把"正文第一行的上半截"当成留白,才会搬到公式之后(= 行首)。

v2.1.13 更新

  • 点行内公式渲染结果的光标落点修好了:点在公式渲染结果上时,落点会按你瞄准的那一刻的版面映射进源码。以前按下的瞬间公式就被翻开、渲染结果随即量不出字形,映射失败就一律把光标扔到这条公式源码的最前面——点公式中段、光标跑到公式开头(用户报的"光标跑到最开始")。实测你文档里那条 $f=f^+-f^-$:沿渲染框每 4px 取 23 点,修前 6 点(右半也有 1 点)落在公式最前面、序列回退 2 次;修后 0 次回退、右半零落点。
  • 字形之间的缝也能点准:KaTeX 字形之间有空隙、上下有 strut 留白(实测占渲染框内取样点的 13~26%),点进这些缝里过去算不出位置。现在退到"离落点最近的那个字形",语义与浏览器"点空白处夹到最近位置"一致。

修复(v2.1.13)

  • 点行内公式渲染结果:某些像素上光标跑到这条公式源码的最前面(右半也会),偏移序列不单调。
  • 落在公式渲染结果的字形缝隙里时映射失败,兜底把光标扔到源码第 0 位。

v2.1.12 更新

  • HTML 图片(正文里直接写 <img …> 的那种)现在能正常删掉了:点选后按 Delete/退格,以前图片不动、反而把别处一个字吃掉、光标跑到标题上(选区被收成塌的,旧守卫据此放弃删除,按键就落给了浏览器)。现在按点选状态删——删除的就是那段 <img …>,别处的字一个不动,光标落在图片原来的位置,一次 Ctrl+Z 复原。
  • ✦ 顺带补上真实系统键鼠注入的验收工具(SendInput 的拖拽/按键/按 PID 定位窗口),用来复现"只有真人手点才出问题"的手势。

修复(v2.1.12)

  • 选中 HTML 图片后按 Delete 或退格:图片删不掉、却吃掉标题里的字、光标停在标题上。

v2.1.11 更新

  • 光标不再掉进"记号洞":点加粗/斜体收尾与标点之间时,光标过去会被吸进看不见的 ** 记号里——退格会吃掉一个星号(导数**。导数*。),Shift+选再打字会插出 *X*。现在光标落进这种看不见的记号会被请回正文边界;用键盘把光标挪进记号(故意改标记)不受影响。
  • 向上拖拽不再抽搐抖动:真凶是 Vditor 在拖拽中把端点所在的公式原地翻成源码(行宽行高全变),指针下的文字跟着位移,端点又落到另一条公式上,翻/收来回打转(实测第 3、4 条公式 top 在 226↔247 反复横跳)。现在按下期间公式一律保持渲染态(只从视觉上压制,松手立刻恢复),拖拽全程零布局变化
  • 松手落点看得见:选区本身没有光标,拖完只剩一片蓝。现在在松手那一点画一根 2px 的闪烁竖线(打字/清选区即撤)。
  • ✦ 选中区域的蓝色底纹覆盖跨过的公式(含四条公式的整段实测:窗口真实像素上蓝通道显著抬升)。

修复(v2.1.11)

  • 点"数"和"。"之间再按退格会删掉 ** 里的星号、打字会插出 *X*(Markdown 被改坏)。
  • 从下往上拖拽选中时公式区频繁抖动(从上往下拉看不出来)。
  • 拖拽选中的落点无处可见(松手位置要靠猜)。
  • 顺带修掉 2.1.10 带出的一条回归:点块公式的渲染结果没反应(点击映射被"只管行内公式"的门挡住;改成"映射成功才接管",渲染层全套件回到 354 通过 / 0 失败)。

v2.1.10 更新

  • 从段尾往回拖到段首能选中整段了:之前反方向拖拽会被判成空选区(Range.setEnd 在终点先于起点时按规范把范围收塌),改成 Selection API 的 setBaseAndExtent 之后方向不再影响结果。
  • 公式段正好是文档末尾时同样有效(用户报告:"只有这行下面加一个空行才能拉起复制整段"——根因是落点压在公式渲染结果上,不是文档末尾本身)。
  • ✦ 行内公式的渲染结果改为可选中(user-select:text):这是"按下能不能起选区"的前提。只发行内,块公式语义未动。

修复(v2.1.10)

  • 从末尾拉到本段首个词,复制粘贴只能贴出最后一行、全程没有任何选中底纹。
  • 原生拖拽被"关在这条公式内部"(按下在公式上、指针已走远)时,改用兜底选区,不再只选中公式内部一小段。

v2.1.9 更新

  • 含公式的段落现在能用鼠标拖拽整体选中:从文字上拖过整段、或按住公式往外拖,跨过的公式在渲染态上就带蓝色选中底纹(与普通文本无异);松手后选区边界那一条公式翻成源码、端点吸到整条公式(照 Typora 的 expand() / includeTrailMeta),复制拿到的是 $…$ 源码。
  • 复制不再是空白:折叠态公式源码原本被收成 0×0,既不在选区文本里也没有底纹——现在按下那一刻把源码 inline 翻出来(临时摘掉该预览的 contenteditable,松手还原)。
  • 单击公式仍然展开源码并把光标放进源码(原有编辑路径未回退)。

修复(v2.1.9)

  • 按在公式上拖拽完全没反应(Chromium 不把落在 user-select:none 渲染结果上的按下当成"可以起选区")。
  • 拖拽时"只有文字有底纹、公式区没效果"。
  • 光标点到段尾再往前选中整段,复制出来是空白。
  • 顺带:拖拽收尾那次补发的 click 会把刚建好的选区当场收掉(Vditor / 刷新按它重设 DOM)。

v2.1.8 更新

✦ 一口气关掉所有窗口,再打开时窗口和文件都回来

上一版修好了「文件 → 退出」这条路的会话保留,但一个一个点标题栏的 X 把窗口全关掉(这也是 在"关掉应用")时,每关掉一个窗口它就从"下次要恢复的窗口名单"里被划掉一个,最后只剩最后一个—— 你看到的正是"只有第一个文件回来了",而且到底留下哪一个还带点偶然性。

现在关掉一个窗口只是暂时挂起:5 秒内如果你把剩下的也关掉(= 应用退出),这次"划掉"作废, 窗口连同文件一起回来;如果关了这一个之后你继续用它干活(超过 5 秒),才真正从名单里去掉, 下次不再自动开回来。

✦ 打开文档时画面不再"抖一阵才停"

打开一个以前读过、位置存下来的文档时,程序会把你上次的阅读位置贴回去。这件事本该在"内容高度 不再变化、位置也贴准了"就收工(1 秒内),可那个"贴准了没有"的判据算式写错了——两项相减的 顺序写反,算出来正好是偏差的两倍(实测偏差 1 像素时它报 2 像素、偏差 −11 时报 22),永远越不过 自己定的 ±2 像素那条线。于是每次打开文档,它都把滚动位置每 0.12 秒重写一次、一直写到 6 秒的 兜底时限(实测重写 76 次,正常该在 10 次以内)。这 6 秒里画面只要有半点布局变化都会被它重新 "拽"一下——就是你感觉到的那种抖动。

现在判据与贴位置用同一个算式:位置一贴准就收工(实测 1 秒内、重写 13 次);误差不足 1 像素时 不再去写滚动位置(写一下会打断浏览器自己的滚动锚定,反而制造小幅跳动)。

✦ 右键菜单不再压住鼠标和你点的那一行

你定的规则是"面板可以在上或下,但不许压住鼠标、也不许压住被操作的那一行"。上一版按这条改好了 补全提示框,但右键菜单还是老样子:菜单左上角钉在鼠标点上,鼠标和你点的那一行都被菜单盖着—— 想点"图片设置…"或"删除(回收站)"时一松手菜单先关了,看着像点了没反应。现在侧栏文件树的右键 菜单和正文里的右键菜单都按同一条规则落位:优先放在那一行下方,放不下放上方,再放不下放鼠标 左右侧——四种位置都不压住鼠标、也不压住那一行。

修复(v2.1.8)

  • 关掉应用再打开,只回来一个窗口(逐个点 X 关闭时每个窗口都被从会话名单里划掉,只有最后一个 幸存):改成"挂起 + 5 秒宽限",退出开始时把名单冻结,窗口销毁时不再重算名单(以前最后一个窗口 销毁时那次重算会把整份名单写空,什么时候写空取决于 400 毫秒的落盘防抖,所以表现飘忽)。
  • 只关掉一个窗口、之后继续用超过 5 秒,这个窗口才会从"下次恢复"的名单里真正消失(保留原语义)。
  • 打开文档时滚动位置被反复重写满 6 秒(锚点误差算成 2×偏差,收敛判据从未生效):算式改成与贴 位置同一口径;误差不足 1 像素时不再写 scrollTop。
  • 右键菜单压住鼠标与被点的那一行(侧栏文件树 + 编辑器正文两处):按上/下/左/右四个候选位置 落位,保证既不覆盖鼠标、也不覆盖被操作的那一行。

v2.1.7 更新

✦ 开始界面上的「打开文件夹」现在真的有反应

如果你把左边那条侧边栏收起来过,以前在开始界面上点「打开文件夹」——屏幕上什么都不会变: 文件树确实读出来了,但它长在一个收起来了的侧栏里。侧栏开着的时候也不给反馈:欢迎页一字不变, 连"已打开工作区,从左侧文件树选择"这句提示都不出现(那句话以前只在启动时就已经有工作区的情况下才显示)。 现在:打开文件夹会把侧栏展开、把文件树摆在你面前,欢迎页补上提示。

✦ 关掉应用再打开,上次的窗口和文件都回来

以前正常退出会把"上次开着哪些窗口"这件事清空:下次打开只剩一个开始界面,昨天开着的三个文件 一个都不回来(反而是崩溃或被强杀之后能恢复)。现在正常退出、点「文件 → 退出」、关掉最后一个窗口, 都会把会话原样留下,下次按原来的位置和尺寸恢复。

✦ 文件树里删文件真的会删

右键文件 →「删除(回收站)」以前点了没有任何反应:确认框弹不出来,文件也不动 (外壳里用的 window.confirm 在这个宿主里恒为"取消",一句话都不问)。现在会先问你一句, 确认后进回收站、可以恢复;点"取消"就什么都不做。

✦ 点文档里的小节链接会跳过去了

[跳到第三节](#第三节) 这种文内锚点,以前点了一点反应都没有。现在会滚到那一节, 并在标题上闪一下高亮,让你看清落在哪儿。

✦ 一次删掉多张图片

按住 Ctrl 点选好几张图之后,按退格或 Delete 没有反应(而且从那一刻起,键盘输入都不再进正文了)。 现在多选之后一次就能整批删掉,撤销能把它们一起找回来。

✦ 公式和片段的提示框不再压住你正在写的那一行

在公式里敲 \in、在正文里敲 /,提示框会自动弹出来;窗口矮一点的时候,以前它会盖住你正在编辑的那一行, 还会盖住鼠标——鼠标正好停在提示框上,随手一点就插进来一个别的公式或模板。 现在它只待在那一行的下方或上方、整体留在窗口里,绝不压住你正在写的那一行,也绝不压住鼠标

修复(v2.1.7)

  • 开始界面的「打开文件夹」没有任何反馈:侧栏收起来时屏幕上零变化;侧栏开着时欢迎页也不变、 不提示下一步。现在用户主动打开文件夹 → 侧栏自动展开 + 欢迎页给出"从左侧文件树选择"的提示 (启动时恢复工作区仍然尊重你收起来的偏好)。
  • 正常退出清空会话:关窗口时把窗口从会话里摘掉,退出时所有窗口都走这条路,于是记录被逐条清空, 下次启动不恢复任何窗口。现在只有"关掉多个窗口中的一个"才摘除;退出(含关掉最后一个窗口)保留整套记录。
  • 文件树「删除(回收站)」永远不生效window.confirm 在 Electron 外壳页里恒为 false 且不弹任何界面, 删除的确认永远过不去。改用主进程的原生确认框(与"未保存修改"同一套)。
  • 文件树的新建/重命名失败提示被吞掉:同一类问题——window.alert 同样什么都不显示, 失败提示一条都到不了用户眼前。现在侧栏里有可见的错误条。
  • 菜单「在此窗口打开文件…」开的是新窗口:与菜单项承诺不符,也让"不想多开窗口"这条唯一入口失效。 现在它真的在当前窗口里替换文档(有未保存修改会先问一句);多选时其余文件仍按"一个文件一个窗口"打开。
  • 点文内锚点链接([x](#标题))没有任何反应:主进程直接忽略了 # 开头的地址,渲染层也没接。 现在在渲染层按标题文字/锚点 id 找到目标并滚过去 + 短暂高亮。
  • Ctrl+多选图片后按退格/Delete 没反应:删除只认"单击选中的那一张",多选集合被无视; 更隐蔽的是多选之后编辑区会丢掉键盘焦点,按键全部落到外壳文档上,编辑区一个都收不到。 现在多选之后焦点留在编辑区,退格/Delete 一次把选中的图片全删掉(撤销可回退)。
  • 加高/矮窗口下补全面板压住正在编辑的那一行和鼠标:面板在上下都放不下时会被"钳"进视口, 正好盖住源码行与鼠标,随手一点就插错公式。现在两侧都放不下时把面板高度压到那一侧的真实空间 (面板内部可滚动),保证"不压住正在编辑的那一行、不压住鼠标"恒成立。

v2.1.6 更新

✦ 右键图片,光标不会再跳到文章开头

刚打开一份文档、滚到图片上点右键——光标以前会直接跳回文章最开头。在长文档里那是几千像素以外的地方, 屏幕上没有任何提示,你接着打字,字会打在最前面。

现在右键图片、公式、代码块这些“点上去不是文字”的地方,光标就落在你右键的位置,文章开头一个字都不会被动。

(这个现象只在文档里当前没有光标时出现——刚打开、或你还没在正文里点过。所以第二次右键往往看着“不跳了”, 不是好了,是光标已经躺在开头了。)

✦ 侧边栏里新建文件、重命名文件,名字框会自动接住键盘

点「新建 Markdown」或按 F2 之后,名字输入框以前不聚焦:直接打字字会丢;先点一下再打,光标落在末尾, 文件名就被接成「未命名.md我的笔记.md」。现在可以直接打字,主名被替换、扩展名保留。

✦ 行尾不再被改掉

CRLF 换行的文件改一个字保存后,以前会整篇变成 LF(记事本里显示成一大行,git 里显示整篇改动)。 现在按文件原本的行尾还原:CRLF 还是 CRLF,末尾没有换行的文件也不会被补换行,带 BOM 的 BOM 不丢。

✦ 内容缩放的快捷键回来了

Ctrl+= / Ctrl+- / Ctrl+0 以前在桌面版里完全没反应(只有 Ctrl+滚轮 能动),现在都好了。

✦ 别的工具写好的 Markdown,改一个字保存后不再变形

行尾两个空格(硬换行)、行尾反斜杠(另一种硬换行)、四空格缩进的代码块、代码围栏后面的说明 (```js {1,3-5})、引用式定义里的标题([doc]: url "标题")——这些以前会在保存时被吃掉, 现在都会原样保留;CRLF 行尾的文件里同样成立。

修复(v2.1.6)

  • 右键图片/公式/代码块把光标扔回文章开头:文档里当前没有光标时,右键落在图片、行内/块公式的渲染结果、 代码块高亮、图表这类“放不下光标”的地方,光标会被挪到文档第 0 位——长文档里离你几千像素远,接着打字会打在 最前面。现在这一类右键不再挪动光标:光标落在你右键的那个块旁边,文章开头不会被误改。正文、标题、表格单元格、 代码块源码上的右键保持原样(光标落到点击处)。

  • 文件树的新建/重命名输入框拿不到焦点:点「新建 Markdown」后直接打字会丢字;先点输入框再打,光标落在末尾, 文件名被接长成「未命名.md我的笔记.md」。现在输入框自动获得焦点并预选中主名(扩展名保留)。

  • CRLF 文件保存后被整篇换成 LF:Windows 记事本打开会变成一行、git 显示整篇改动。现在按文件原本的行尾还原, 并保证「末尾无换行」与 BOM 也不被改动。

  • 桌面版内容缩放快捷键失效Ctrl+= / Ctrl+- / Ctrl+0 三个键之前没有反应(只有 Ctrl+滚轮有效),现在按预期缩放。

  • 源码形态在保存时被改坏:行尾两空格/反斜杠(两种硬换行写法)被剥掉、四空格缩进代码块被拉平、 围栏信息串(js {1,3-5}title="示例")被截断、引用式定义的标题丢失;且这些修复在 CRLF 文件上 一度全部失效(收集时按 \r\n 切行、比较时是 LF),现在一并修好并进了回归。

v2.1.5 更新

✦ 清空整篇之后接着打字,不再变成公式

Ctrl+A 全选 + 一次退格把文档清空之后,接着打的第一句话以前会变成公式:当文档最后一块是块公式时, 光标会停在那个被清空的 $$ 里,你打的字直接进了公式源码——屏幕上出现的是一段按公式排版的斜体字 (打 abc,文档里就变成 $$\nabc\n$$)。

现在清空之后是一个普通的空段落,接着打字进的是正文。

修复(v2.1.5)

  • 清空整篇之后接着打字会被当成公式Ctrl+A 全选 + 一次退格之后,如果文档最后一块是块公式,光标会停在 那个空 $$ 的源码里,之后输入的字符全被写成 TeX(打 abc 就得到 $$\nabc\n$$)。现在这种"清空后只剩 一个空块公式"的形状会归位成空段落,打字进正文;清空后按一次 Ctrl+Z 依旧逐字节把整篇文档还原。

v2.1.4 更新

✦ 公式旁边按「按词删」不再毁公式

Ctrl+Backspace / Ctrl+Delete(按词删)以前会绕过公式的贴边保护:光标停在一条块公式前面按下去, 整条 $$…$$ 会被并进上一段,公式当场散成一行文字。现在带 Ctrl/Cmd 的退格与删除也走同一套保护, 这两组键的其余行为一个字都没改。

✦ 点公式上下的那几像素空白,不再吃掉公式源码

折叠的块公式上方或下方几像素的空白,以前点下去会落到隐藏的公式源码里,紧跟着按一下退格就删掉了公式里的 一个字符。现在这类点击按几何位置落到公式之前/之后,永远不会落进源码。

✦ 大文档里移动光标更省

每移动一次光标都要跑一遍的公式状态同步里,有一句"找当前展开的公式"是最贵的一步——在一份 49 万字、 5634 条公式的文档上,它一项就占掉整趟的九成。换成更省的查法之后,这一趟从 0.289 ms 降到 0.099 ms(约 3 倍)。

修复(v2.1.4)

  • 按词删(Ctrl+Backspace / Ctrl+Delete)会绕过贴边保护、把整条块公式并进上一段:在真实文档上实测, > (1) 那一行会当场变成 > (1)\neg\,\exists x\in A, P(x)\;\Leftrightarrow…(公式散成引用块里的文字)。 现在这类按键也走同一段贴边保护,保护之外的行为不变。
  • 点"公式块上方那几像素的页边距"再按退格,会吃掉公式源码的最后一个字符:现在贴着折叠公式的空白留白 按几何归位到公式之前/之后。

v2.1.3 更新

✦ 点在公式周围的空白上,光标不会再掉进隐藏的源码里

块公式折叠时,它的源码是一个 0×0 的壳。在公式下方那片看起来是"空行"的地方点一下,浏览器会把点击解析成 源码文本里的某个位置——同一片留白,靠左拿到源码末尾、中间拿到开头,取决于你点在哪。于是"点一下再按退格" 删掉的是公式里的一个字符(x+y=1x+y=)。现在点公式周围的空白,光标落在公式之前/之后; 点渲染出来的公式本体,照旧展开源码、进源码编辑。

✦ 现在的手感

  • 点公式块周围的空白留白:光标落到公式之前/之后,公式不展开、也不会落进隐藏源码里;点公式本体照旧展开源码。
  • $$ 围栏:光标就停在 $$——第一个 $ 前、两个 $ 中间、最后一个 $ 后,按你点在哪决定。
  • 在围栏上或紧贴公式块按退格:文档一个字节都不改,并弹一句说明。
  • 在围栏上打字 / 粘贴 / 输入法:字符落进公式源码的对应一端,围栏和 Markdown 都不会被写坏。
  • 只增不减:前几版的修复全部保留。

✦ 为什么在渲染视图里删不掉单独一个 $

块公式的 $$、行内公式的 $ 都是渲染器每次重排时重新生成的标记,编辑内核里并不存在"删掉一个 $"这个动作 (改标记文本不参与保存,会被丢掉)。所以这里的选择是"围栏上可以停光标、但退格不改文档,并且当场说明原因", 而不是假装删掉一个 $、把公式变成半截文本。要逐字符改围栏,用工具栏的「切换源码视图」,那里围栏就是普通文字; 要删整条公式,整条选中按一次 Backspace/Delete 即可。

修复(v2.1.3)

  • 跨引用块的段落贴边没被拦住> $$ … $$ 后面跟一行不带 > 的空行、再跟 > (2) 时,两行分处不同的引用块, 这一下退格会把整段引用块的 > 前缀削掉(> (2)(2)),看起来就像公式被删了。现在贴边判定会往上层节点走。
  • $$ 会被塞进源码里(所见非所得):点开围栏=光标到源码开头,点闭围栏=光标到源码末尾,接着打字就落在你点的那一侧。
  • 行内公式源码第 0 个位置退格会整条消失:现在同样纳入边界拦截。

v2.1.2 更新

✦ 贴着公式按退格,公式一个字节都不会变

在公式块的边上按退格,以前会把 $$…$$ 整块散进上一段文字里;上一版改成"第一下选中整条、第二下整条删除", 连按两次公式照样会消失。现在这一下只把光标挪到公式外面最近的文字上,文档不动;再按一下删掉的是公式外的普通文字。

$$ 围栏点在哪就在哪落光标

展开后点前 $$,光标落在源码开头;点后 $$,落在源码末尾;接着打字,字符真的落在你点的那一侧 (以前停在围栏上打字,字符会悄悄跑到源码末尾)。

✦ 行尾公式的预渲染框从机制上不可能再停留

只要光标不在公式的源码/预览里,展开样式立刻撤掉——不再依赖"再跑一遍"去追渲染时序,所以不会再出现 "同一处点击有时收得回、有时收不回"。

修复(v2.1.2)

  • 光标落在公式"本体"上(元素级位置)时,边界判断不认:这一下退格会让整块 $$…$$ 散进上一段。现在这类位置也纳入边界判定。
  • 贴边退格不再"先选中整条公式":改为把光标挪到公式外最近的文字位置,文档零改动。
  • 展开态(预渲染框)改为强制收回:光标不在公式源码/预览里就撤掉展开样式,消除时序竞争。
  • $$ 围栏点击语义明确:点开围栏=光标到源码开头,点闭围栏=光标到源码末尾(以前点尾 $$ 光标会掉进下一段)。
  • 行内公式源码第 0 个位置退格会整条消失(v2.0.4 那个形状对行内仍会漏):现在同样被拦住。
  • 只增不减:上一版的其余修复全部保留(整条选中删除不留残渣、公式源码里 Ctrl+B/I/U 与回车不再改坏 TeX 等)。

v2.1.1 更新

✦ 公式「贴边」的编辑手感对齐直觉

这几处都是真实文档里报出来的:

  • 一行最后是公式时,光标停在行尾不再自己弹出预渲染框。以前光标一落到行尾(在行尾点一下、或按 End), 最后一个公式的浮层就冒出来挡住下文;现在只有点公式本身才会展开源码来编辑,停在公式前/后都只是普通光标位置, 接着打字就落在公式之后。
  • $$ … $$ 前后那两个 $$ 现在可以落光标。以前块公式展开后,不管点哪儿光标都只能停在源码的第一个位置; 那两个 $$ 现在是真的文本,点它、选它、按字符改它都成立。
  • 贴着公式按退格不再毁公式。以前在公式块的边上(块首、块尾,或紧邻段落的首尾)按一下退格,$$…$$ 会整块 散成一行纯文本,或者悄悄吃掉源码里的字符;现在这类位置的第一下只把整条公式选中(文档一个字都不动), 再按一下才把它作为一个整体删掉——想整块删掉公式仍然两下就够。

✦ 顺手修掉巡检中发现的三处同类问题

  • 公式源码里按 Ctrl+B / Ctrl+I / Ctrl+U 不再把 ******<u></u> 插进 TeX 源码(以前公式当场就坏)。 剪贴板、撤销重做、全选不受影响。
  • 公式源码里按回车不再把 TeX 拆断(以前会得到 $a$a+1+1$ 这种垃圾)。行内公式里这一下只把光标移到公式之后; 块公式是多行源码,回车照旧换行。
  • 删除整条公式(无论是你自己选中的、还是上面那一步选中的)不再留下 <span> 之类的残渣文本。

修复(v2.1.1)

  • 光标停在行尾、而这一行以公式的 $ 结尾时,最后一个公式被自动展开并浮出预渲染框:贴边的光标现在不算在编辑公式, 并且会把自动挂上的展开态收回。
  • $$ 以前不管点哪都只能落到源码开头(那两个 $$ 是画出来的、不参与点击命中):展开后改用真实的 $$ 文本, 点哪落哪,折叠态照旧只显示渲染结果。
  • 光标作为节点的首/尾子位置时,退格会吃掉末尾的 $,把公式变成一行字面文本:这类贴边位置改为先把整条公式选中。
  • 块公式源码开头退格会把 $$ 围栏拆掉$$…$$ 整块散成一行文本)、行内公式源码末尾删除会整条消失: 朝围栏方向的删除改为先选中整条公式;向内的正常改字(源码末尾退格、源码开头删除)保持原样。
  • 光标停在块公式紧邻的段落首/尾按删除,会把公式块并进段落文本:现在改为先选中整条公式。
  • 公式源码里的 Ctrl+B / Ctrl+I / Ctrl+U 不再把 Markdown 记号插进 TeX 源码。
  • 行内公式源码里按回车把 TeX 拆断并复制出半截公式:现在只把光标移到公式之后,不改文档。

v2.1.0 更新

✦ 一次开好几份稿子:一个文件一个独立窗口

以前打开第二个文件会顶掉已经打开的那一份——这是产品最要紧的缺陷之一。这版改成:每个文件一个独立窗口,各自可以拖动、缩放、最大化,互不影响;关掉一个不影响其它;只有关窗口或退出应用时才问你要不要保存,而且是逐个确认,点「取消」就中止整个退出(已经确认过的窗口内容不会丢)。

顺手一起做好的:

  • 同一个文件只开一个窗口:再次打开已在别处的文件,直接把那个窗口带到前面,不会弄出两份互相覆盖。
  • 记住你上次开着哪些窗口:每个窗口的文件、工作区、位置和大小都记下来,下次打开原样回来。
  • 每个窗口一套文件夹树:不同窗口可以开在不同目录,互不牵动;同一个目录只监听一次,不会开几个窗口就重复监听几遍。
  • 拖入或一次选中多个文件:每个文件各开一个窗口;当前窗口若还停在欢迎页,就先填进当前窗口,不浪费一个空窗口。

✦ 窗口很小的时候,工具栏会自己让位

窗口压得很矮时(那种小窄窗),工具栏换行后会占掉一大块高度,正文几乎没地方。现在只要工具栏占到可视高度的 35% 以上,它就自动收上去;鼠标移到窗口顶边它滑出来,鼠标离开再收回去,正文始终是满的。窗口拉回正常高度后一切照旧。(实测极端小窗里这一档占到了 116%。)

窗口本身也不会再被压到比工具栏还矮了:最小高度按「换行之后实测的工具栏高度」来定(让工具栏最多占可视高度的 80%)。所以窗口越窄、工具栏换行越高,能缩到的最小高度就跟着变高;再拉宽,最小高度又跟着降回去——它盯的是实际排版结果,不是一个写死的数字。

✦ 在 IDE 里也不再「只能开一份」

  • 默认把标签页钉住:以前单击文件会用同一个标签顶掉上一份(IDE 的「预览标签」行为),现在默认新开标签,多份稿子可以同时开着。
  • 新增右键菜单「用 MarkPilot 打开(新标签页)」,任何设置组合下都强制新开标签。
  • 切回某个标签时,编辑区会和最新内容对齐一次(长时间在后台的标签不会再显示旧内容)。

修复(v2.1.0)

  • 超小窗口里工具栏占掉半个屏幕:见上,35% 以上自动收纳,贴顶弹出、离开收回。
  • 标签页切回来可能显示旧内容:IDE 里隐藏的标签页不保证收到更新推送,现在切回来按最新内容对齐一次(内容没变就不动,不会白丢撤销历史)。
  • 个别弹窗关掉后还留在页面上,导致再也打不开:窗口被别的窗口完全遮住时,「关于」「快捷键设置」这类弹窗的关闭事件可能不派发,节点留在 DOM 里、判重逻辑就把后续的打开请求挡掉了。现在关闭动作自己收尾,关一次干净一次。
  • 退出应用时的偶发报错框:多窗口退出时窗口正在销毁,焦点回调读到已销毁的窗口会弹错误框并卡住退出流程;现在这类回调一律跳过销毁中的窗口。
  • 一次打开多个文件却只剩一个窗口:一次拖入/多选多个文件时,第二个文件会被误判成「填进刚建好的那个空窗口」,几个文件挤进同一个窗口——它正是「开一个顶掉一个」的另一种形态,已修正。
  • 两个窗口之间复制复杂表格,单元格里的格式会丢:复制带粗体/行内代码的单元格时,记号会被悄悄吃掉(粘过去就只剩纯文字)。现在按 Markdown 逐格还原,粗体、公式、行内代码、图片、转义竖线都能原样过去,粘到另一个窗口后重新变成真节点。
  • 两个窗口之间剪切表格会粘成一串:剪切选中的表格格子后,剪贴板里得到的是一串连在一起的文字(还会顺带弄坏表形),粘到另一个窗口只剩一格。现在剪切和复制是同一套矩形语义,并且只清空选中格、不动表形。
  • 两个窗口之间剪切图片会指向原文档的文件夹:剪走的图片粘到另一个文档后引用的是原来那个文件所在目录,换个文档就断链。现在剪切图片也按"图片"进剪贴板,粘到哪份文档就跟着哪份文档走。

v2.0.20 更新

✦ 导出终于会问你把文件放哪了

导出从工具栏「更多」里的一个小图标,改成一眼可见的独立按钮:点开就是 PDF / Word / HTML / 便携 Markdown 四选一,先弹保存对话框让你选好位置、点了确认才开始导出;导出完成后会自动打开资源管理器并选中刚生成的文件,不用再猜它去哪了。按钮本身不带文字,用的是各平台通用的「方框 + 箭头出框」图标——中英文使用者都认得;四种格式和"先选保存位置"写在鼠标悬停的提示里。

✦ 工具栏清爽了:不再有装样子不干活的按钮

去掉了几个看着像功能、点了却没反应甚至帮倒忙的按钮(详见下面「修复」)。工具栏上留下的每一项都真的能用。

修复(v2.0.20)

  • 导出 PDF 之后不知道文件去哪了:工具栏「更多」里原先同时有两个「导出」,一个是我们自己的(只有一个没文字的图标),另一个是编辑器内核自带的(写着「导出」,而且只有它里面有 PDF)。点后者导 PDF,屏幕会提示"生成中",但文件从来没有被创建过——它只是把内容塞进一个零高度的隐藏框去调系统的打印命令;导 Markdown / HTML 则会不声不响地下载进系统下载目录。现在那个会骗人的入口已经移除,「导出」提升为一级图标按钮,导出成功后会直接帮你定位文件。编辑器自己的导出引擎一直是好的(PDF / Word / HTML / 便携 Markdown 四种格式逐字节校验通过),坏的是入口。
  • 鼠标侧键会让整个编辑区消失:用带前进/后退侧键的鼠标时,按「后退」编辑区会整片消失,再按「前进」才拉回来。原因是编辑器把每份文档都装进内部框架,每开一个文档都会往浏览历史里压一条记录,「后退」就把它退回了上一个文档甚至空白页。现在前进/后退侧键(以及常被鼠标驱动映射成的 Alt+←/→)都会被拦下,编辑区不会再被翻走;中键、右键一切照旧。
  • 录音按钮是个坑,已移除:它看起来能录音,实际点下去会占用麦克风,录完却把音频当图片处理、弹一句「不支持的图片格式」,文件不会保存到任何地方;更麻烦的是它会让正文的编辑区变成只读,连点两次之后正文就打不了字了。这个功能从来没有真正接好,这版直接拿掉。
  • 「关于」里讲的是别人的项目:以前点「关于」看到的是编辑器内核那个开源库的介绍,还带着它的官网和论坛链接;「帮助」跳的也是它的文档站。现在「关于」显示 MarkPilot 自己的版本号和仓库地址,「帮助」指向我们的 GitHub 仓库。

v2.0.18 更新

✦ 打开文档,快了一秒

写长文的人最在意的那点等待,这版砍掉了:小文档从启动到内容上屏 1.5 秒 → 0.55 秒,二十万字的大文档 1.9 秒 → 0.9 秒。换文档、滚动、阅读位置还原都没有退化。

✦ 表格里的公式,点一下就能改

把公式写进表格单元格也没问题:点一下展开源码,改完立刻重排;上方/下方插入行、左侧/右侧插入列、删除行列都在右键菜单里,而且表格之外的正文一个字符都不会动

✦ 保存不会偷偷改你的文件

没动过的地方,存盘后与你原来的文件一字不差——不会多出看不见的字符,也不会顺手把你的排版重排一遍。

修复(v2.0.18)

  • 右键菜单「剪切」点了没反应:某些环境下它只把文字放进剪贴板、没有真的从文档里删掉,于是剪切看起来什么都没发生、接着粘贴还会出现重复内容。现在剪切会真的删掉你选中的内容。
  • 表格存盘后的行与列:保存时表格会按列宽重新对齐,每一格的内容都原样保留。

开源与授权

开源项目,万众铸造——功能请求、缺陷反馈、主题与词条贡献都通过 GitHub Issues 汇入,每个版本都由真实写作场景驱动。程序与插件本体永久免费;需要二次开发、想魔改的完整源码为付费授权,请到仓库 Issues 联系作者。

安装包内附《第三方组件声明》(THIRD-PARTY-NOTICES.md),随每个版本同步更新。

隐私

本地优先。编辑、渲染、导出全部本地完成;AI 补全只在触发时直连你选择的模型服务商,Key 存于本机加密存储,永远不离开你的电脑。


MarkPilot(万可百律)· 万有可能,一致百「律」 · 由一个每天用它写文档的人维护

如果它对你的写作有帮助,点一个 ⭐ 能帮更多人找到它。

About

Free AI-native Markdown editor for Windows + VS Code/Trae — a Typora alternative with inline AI completion, live math editing (click a symbol to edit its source), large-file speed and print-quality CJK typography.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors