Enterを押したのに2行がひとつの段落になり、打ったとおりに見えない。Markdownで誰もが最初に驚くところで、しかもこれは意図された設計です。原稿の中の改行1つは、ただの空白として扱われます。おかげで長い段落をエディタの中で折り返しても、出てくるものは変わりません。

欲しかった改行を得る方法は3つあります。下のパネルを編集して、どれがどれか確かめてください。

改行の3つのやり方
Markdown
この行と、この行は
同じ段落に収まります。

上に空行があると、新しい段落が始まります。

行末に半角スペース2つで  
同じ段落の中で改行できます。

バックスラッシュでも同じです\
こちらは目に見えます。
Preview

この行と、この行は 同じ段落に収まります。

上に空行があると、新しい段落が始まります。

行末に半角スペース2つで
同じ段落の中で改行できます。

バックスラッシュでも同じです
こちらは目に見えます。

その裏にある規則

Markdownには別々の概念が2つあり、混同することが混乱のもとです。

  • 段落の区切りは、2つの文章の塊のあいだに間を空けます。<p> 要素が2つに分かれます。空行で作ります。
  • 改行は、同じ段落の中で次の行に移ります。<br> になります。行末の空白2つ、またはバックスラッシュで作ります。

たいていの場合、欲しいのは段落の区切りで、それには空行1つで足ります。

空白2つの問題

行末の空白2つは元からある記法で、ほぼどこでも動きます。ただし目に見えません。書いているあいだは確認できず、たいていのエディタは保存時に行末の空白を削り、コードレビューにも現れません。自分の手元では正しく出るファイルが、他人が開いて保存した瞬間に静かに壊れることがあります。

バックスラッシュのほうが新しく、CommonMarkの一部で、原稿の上で見えます。エディタと出力先の両方がCommonMarkに対応しているなら(いまどきのものはたいてい対応しています)、こちらを選んでください。古いものや変わったものに向けて書くなら、空白2つを使い、エディタの「行末の空白を削除」を切っておいてください。

Markdown
バラは赤い  
スミレは青い

バラは赤い\
スミレは青い
Preview

バラは赤い
スミレは青い

バラは赤い
スミレは青い

出てくるものは同じです。保存を生き延びるのは片方だけです。

改行がいちばん効く場面

住所、詩、歌詞、署名。違いが目に見え、段落の区切りでは間違いになる場面です。

Markdown
Carlo Di Giuseppe\
AppJuice\
イタリア
Preview

Carlo Di Giuseppe
AppJuice
イタリア

改行がなければ1行につながってしまいます。あいだに空行を入れれば3つの段落になり、今度は離れすぎます。

よくある間違い

リストの中でEnterを2回押す。 項目のあいだの空行は、詰まったリストをゆるいリストに変えます。各項目が <p> に包まれ、間隔が広がります。これは本物の機能ですが、人を驚かせます。リストのガイドを参照してください。

保存時に行末の空白が消される。 エディタの設定を確認してください。同じMarkdownファイルが他人のところで違って見える理由として、いちばん多いものです。

<br> を直接書く。 たいていの処理系は生のHTMLを許すので動きます。ただし文書の持ち運びやすさ、つまりMarkdownの存在理由そのものを損ないますし、HTMLが無効な場所ではそのまま文字として出ます。

空行を増やせば余白が広がると思う。 空行3つは空行1つと同じ結果になります。Markdownはまとめてしまいます。縦の余白が要るなら、それは内容ではなく体裁の判断です。

よくある質問

Markdownが改行を無視するのはなぜですか?

そういう設計だからです。Markdownは改行1つを空白として扱います。おかげで長い段落を原稿の中で何行にも折り返しても、出力では切れません。改行を入れたいときは行末を空白2つかバックスラッシュで終え、新しい段落にしたいときは空行を入れます。

空白2つとバックスラッシュの違いは?

結果はまったく同じで、いまの段落の中の <br> になります。空白2つは2004年の元の記法でほぼどこでも通りますが、原稿の上では見えません。バックスラッシュはCommonMarkで加わったもので、目に見え、行末の空白を削るエディタでも生き残ります。

GitHubでは改行の扱いが違いますか?

場所によっては違います。イシュー、プルリクエスト、コメントでは、GitHubは改行1つを本物の改行として表示するので、Enterを1回押せば期待どおりになります。リポジトリの中の .md ファイルでは標準の規則に従い、行をつなげます。同じ文章がREADMEとコメントで違ってふるまうのは、このためです。

段落のあいだに空行を入れるには?

空行1つで足ります。Markdownは連続する空行を何行あっても1つの段落区切りにまとめます。目に見えるほど余白を足したいならHTMLかCSSが要りますが、それは体裁の話で、Markdownが表現するものではありません。

段落を1行の長い行として書いてもいいですか?

はい、多くの人がそうしています。改行1つは空白として扱われるので、段落をとても長い1行で書いても、80文字で折り返しても、出力は変わりません。編集しやすいほうを選んで、そろえておいてください。