功能價格文件部落格
取得 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 應有的樣子。

← 較舊文件再長,打字也不會變慢的原因較新 →不用網頁引擎,快速渲染數學公式的方法
透過 RSS 持續關注。
只留下文字。
繁體中文
© 2026 mote