功能价格文档博客
获取 mote
← 博客
设计·2026年7月10日·阅读需 4 分钟

为了在其他工具中也显示为相同段落,我们定义了 Enter 键的规则

你是否遇到过这种情况:在 Markdown 编辑器中按了一次 Enter,画面却向下跳了两行;或者画面上分开的段落到了 GitHub 上却连成了一整块。这其实是同一个问题的两面。

m
mote
将同一份文档以实时模式和源码模式并排显示的画面。左侧的段落之间没有空行,右侧则原样显示文件中实际存在的空行。
将同一份文档以实时模式和源码模式并排显示的画面。左侧的段落之间没有空行,右侧则原样显示文件中实际存在的空行。

在 Markdown 编辑器中按下 Enter 时,应该发生什么?

画面上应该只向下移动一行。但是在文件中,需要两个换行符来分隔段落。这个看似简单的差异决定了编辑器的特性。

mote 选择了既原样保留文件,又能自然书写段落的方式。

按一次,就向下移动一行

在 mote 中,Enter 会创建一个新段落。

画面上向下移动一行,文件中则会写入两个换行符。如果光标旁边已经有一个换行符,就把它算作段落分隔的一半。因此无论周围有什么,按一次都会移动一行。

如果只想在同一个段落内换行,按 Shift+Enter 即可。文件中会写入一个换行符,下一行也会留在同一个块中。需要像地址或诗歌那样紧接着分行书写时,这很有用。

段落之间的空行不会单独显示在画面上。因为它是分隔段落的分隔符。光标也不会停留在它上面。按下 Backspace,段落分隔会一次性消失。

也就是说,每输入一次,画面也只移动一行。

文件也会保持 Markdown 应有的样子

Markdown 使用两个换行符来分隔段落。

如果把一个换行符也当作段落,就会出现问题。在别人创建的文件中,段落间距会扩大一倍;而在 mote 中创建的文件,到了 GitHub 或 Pandoc 上则会连成一个段落。

为了维持这种模型,Typora 会在保存时规范化文件。例如把三个空行缩减为一个。mote 不会擅自修改文件。因为它的原则是不添加或删除用户没有写入的字节。

取而代之的是,我们又制定了一条规则。

不创建文件中存在、但既看不见也无法编辑的行。只隐藏一个用于分隔段落的空行,其余所有空行都显示在画面上。

空行也需要规则

最初,我们只把连续空行中的第一行视为段落分隔符。

于是出现了奇怪的情况。在空白行中输入文字时,它会与下方的段落连在一起;要创建新段落,还得再按一次 Enter。删除段落后,有时还会留下一行空白。

原因只有一个。段落分隔由两个换行符组成一对,但我们只把其中一个计算为分隔符。

现在,分隔符和空段落会在连续的空行中交替出现。三个空行在画面上会变成一个空白行。空段落也是一行,因此它的两侧都需要分隔符。

我们也明确规定了 Enter 重用周围换行符的情况。只重用连接同一段落中两行文字的换行符。已经用于段落分隔的换行符不会再次使用。

Backspace 也遵循同样的原则。删除空段落时,该行和周围的分隔符会一并消失。按一次,只减少一行。

我们会同时在画面和文件中检查这一行为。不仅检查画面的行高,也在同一个测试中确认文件里实际保存的字节。

在源码模式中原样显示文件

段落规则只适用于实时模式和阅读模式。

在源码模式中,每一行都会占据一行。空行也会原样显示,光标可以移动到任何位置。按下 Enter 时,只会写入一个换行符。

以源码模式查看的同一份文档——标题的 #、粗体的两个星号、列表的连字符全部显示为字符,块与块之间的空行也各自占据一行
以源码模式查看的同一份文档——标题的 #、粗体的两个星号、列表的连字符全部显示为字符,块与块之间的空行也各自占据一行

如果在画面上添加了解释,也应该有一个可以去掉这些解释、查看原文的地方。这也是处理表格或代码块时需要源码模式的原因。

原样显示也会带来限制

如果文件以换行符结尾,最后会显示一个空白行。

最后一个换行符并不是两个块之间的分隔符。它是可以输入下一个字符的位置。因此不会将它隐藏。

在旧版 mote 中使用一个换行符分隔的文档,现在会显示为一个段落。这是符合 Markdown 规则的结果。如果要分隔段落,只需在相应位置再按一次 Enter。mote 不会偷偷修改文件。

段落既不是只存在于画面上,也不是只存在于文件中。mote 让它在画面上可以自然地书写,同时在文件中保持 Markdown 应有的样子。

← 较早文档再长,输入也不会变慢的理由较新 →不使用 Web 引擎快速渲染公式的方法
通过RSS持续关注。
只留下文字
简体中文
© 2026 mote