ほかのツールでも同じ段落に見えるよう、Enterキーのルールを決めた
MarkdownエディターでEnterを一回押したのに画面では二行下がったことや、画面上では分かれていた段落がGitHubでは一つの塊につながってしまったことはありませんか。二つは同じ問いの表と裏です。

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らしい形で残るように作りました。