為什麼同樣的 Markdown 到處長得不一樣
Markdown 不是程式,而是一套書寫純文字的慣例。每個要顯示它的 App 都得自備一個剖析器:負責讀你的字元、決定要蓋出什麼東西的軟體。沒有任何規定要求兩個剖析器必須一致。
- 核心 Markdown 到哪裡都一樣,各家真正分道揚鑣的是占三分之一的擴充語法。
- 有些 App 會保留你的
.md檔,有些只留文字,有些直接把符號丟掉。 - 下方對照表以表格、待辦清單、註腳、程式碼與儲存方式比較十一個平台。
- 其中四個平台另有專頁,因為一句「支援/不支援」講不清楚它們的行為。
第一個選擇:這個 App 鎖定哪一種方言
多數現代工具跟隨 CommonMark 再加上 GitHub 風格 Markdown 的擴充,表格、待辦清單、刪除線都是從這裡來的。聊天軟體則只實作自己挑過的一小部分。在一行訊息裡塞表格,比較像設計問題而不是功能。
第二個選擇:實際幹活的是哪一套剖析器
第二個選擇是函式庫本身,以及它有多舊。GitHub、Obsidian 和本站編輯器都宣稱支援 GFM,邊角行為仍然不同:註腳怎麼處理、HTML 能不能穿透、清單巢狀要幾個空格、裸網址會不會自動變連結。每一項都是別人替你做的小決定。
為什麼問題很少出在你的語法
所以你打出來的字元幾乎從來不是原因。核心 Markdown 到哪裡行為都一樣,真正讓各平台分裂的是擴充元素,大約占這個語言的三分之一。Markdown 語法總覽清楚列出哪些元素屬於哪一層,什麼是 Markdown 則說明這個格式當初為什麼會長出這麼多方言。
會保存 Markdown 的 App,與只是接受 Markdown 的 App
這是整頁最有用的觀念,而且跟語法完全無關。在問「這個 App 支不支援 Markdown」之前,先問「你打完字之後,它把那些字元怎麼了」。答案有三種。
第一類:Markdown 就是儲存格式
Obsidian、VS Code,以及所有靜態網站產生器(Hugo、Jekyll、Astro、Eleventy、MkDocs、Docusaurus),都把真正的 .md 檔放在你自己掌控的硬碟上。符號留在檔案裡,你可以用 grep 搜尋、用 Git 追蹤版本、用任何編輯器打開,一個下午就能把整個資料夾搬到別的工具。GitHub、GitLab 儲存庫裡的檔案也屬於這一類。
第二類:Markdown 只是輸入方式
Notion 與 Slack 讀取你的字元、蓋出自己的內部物件,然後把符號丟掉。在 Notion 打 ## 會變成標題區塊,井字號消失,也沒有原始碼檢視可以切回去,因為根本沒有原始碼。你只是把 Markdown 當成鍵盤快速鍵在用。
第三類:原始碼有留,但不是一個檔案
Discord、Reddit,以及 GitHub 和 GitLab 上的留言,都把你的原始文字存進資料庫,每次顯示時重新渲染。編輯訊息時,你的星號會原封不動回來。這比第二類友善,但文字仍然關在單一服務裡,只能靠複製貼上帶走。
為什麼這比功能清單更重要
可攜性、版本控制與長期保存,全都取決於它屬於哪一類,而不是它渲染得出幾個元素。第一類的 App 就算表格做得比 Notion 差,仍然是存放五年份筆記更安全的地方。
小提醒:把專案交給一個 App 之前,先判斷它屬於哪一類。離開第二類永遠比進去難,而大家都是到了想搬家那天才發現。
平台支援對照表
十一個平台,對上最常決定「文件搬家後能不能活下來」的四個元素,再加上儲存問題。「部分」代表「看你的用戶端、版本或設定」。
十一個平台,五個問題
| 平台 | 表格 | 待辦清單 | 註腳 | 程式碼標色 | 存成 .md |
|---|---|---|---|---|---|
| Notion | 部分,只有自家表格區塊 | 支援,變成待辦區塊 | 不支援 | 支援 | 否 |
| Obsidian | 支援 | 支援 | 支援 | 支援 | 是 |
| Discord | 不支援 | 不支援 | 不支援 | 支援,可加語言名稱 | 否,保存為訊息文字 |
| 支援 | 不支援 | 不支援 | 不支援,只有等寬字體 | 否,保存為貼文文字 | |
| GitHub | 支援 | 支援 | 支援 | 支援 | 是,儲存庫檔案 |
| GitLab | 支援 | 支援 | 支援 | 支援 | 是,儲存庫檔案 |
| Slack | 不支援 | 不支援 | 不支援 | 不支援,只有等寬字體 | 否 |
| Microsoft Teams | 不支援 | 不支援 | 不支援 | 部分,需用程式碼片段功能 | 否 |
| VS Code 預覽 | 支援 | 支援 | 部分,需安裝擴充套件 | 支援 | 是 |
| Jupyter | 支援 | 部分,JupyterLab 才會渲染 | 部分,視版本而定 | 支援 | 否,儲存格存在 .ipynb 裡 |
| Ghost | 支援,需用 Markdown 卡片 | 部分 | 部分 | 部分,看佈景主題 | 部分,原始碼留在文章內 |
直著看欄,比橫著看列有用
- 表格是分辨「文件工具」與「聊天工具」最快的一欄。
- 註腳把認真的寫作工具跟其他東西分開。
- 程式碼標色是聊天軟體偶爾會贏的一欄,因為短片段本來就是它們的主場。
- 存成 .md 是五年後真正有差別的一欄,也是唯一事後補不回來的一欄。
沒有列出的軟體通常可以從類別推測:開發工具與筆記軟體接近 Obsidian,聊天軟體接近 Slack,區塊式協作工作區接近 Notion。
怎麼寫,才能撐過跨平台搬家
如果一份文件最後可能出現在你起草的地方以外,養成幾個習慣就能消除幾乎所有痛苦,而且寫作當下不會多花任何力氣。
六個值得養成的習慣
- 要貼進聊天軟體的內容,只用核心語法。標題、粗體、斜體、清單、連結、程式碼圍欄到哪裡都通;表格、註腳、待辦清單則不然。
- 避免直接寫 HTML。它在靜態網站可用,在 GitHub 會被過濾,在其他多數地方要嘛原樣顯示,要嘛整段被拿掉。
- 巢狀不要超過兩層。清單縮排是整個語言最不可攜的部分,真的需要時,每層四個空格最安全。
- 絕對不要用行末兩個空格來換行。它看不見、編輯器會自動清掉,上表中也有一半的平台根本不理它。改用空行與真正的段落。
- 圖片放在檔案旁邊,並使用相對路徑。指向你自己電腦的絕對路徑,只要換人打開就立刻失效。
- 在會保存原始碼的地方起草。用第一類工具寫,再貼進第二類,絕不要反過來。
兩個能提早抓出問題的工具
長文件要貼到不寬容的地方之前,先用 Markdown 檢視器確認渲染結果。要把內容從所見即所得編輯器搬出來,HTML 轉 Markdown 可以把貼上的網頁轉回乾淨的原始碼。其餘的免費 Markdown 工具則負責轉換、表格與目錄。
本站首頁的 Markdown 編輯器渲染的是 GitHub 風格 Markdown,可以當成 GitHub、GitLab 與多數現代工具會怎麼處理你檔案的合理參考。
想看細節就往這裡走
對照表回答的是「能不能用」。有四個平台需要的不只這樣,因為一格「支援/不支援」蓋掉了真正會絆倒人的行為。
照你手上的問題挑一頁
- 為什麼
>產生的是折疊區塊而不是引用?這個問題,連同哪些快速鍵會邊打邊轉換、匯入與匯出.md時什麼會活下來,都是Notion 的 Markdown負責的範圍。 - 我用得很順的功能,哪些搬家時帶不走?Obsidian 的 Markdown 談這個最接近純 Markdown 的軟體,以及雙括號連結、callout、YAML front matter 這些留不住的非標準功能。
- 為什麼我一半的格式打了等於沒打?Discord 的 Markdown 把支援的那一小組語法、劇透標記與程式碼區塊語言整理清楚,讓你別再打不會被讀的符號。
- 該用花俏編輯器還是 Markdown 模式?Reddit 的 Markdown 直接回答這題,也談 Reddit 剖析器自己的怪癖。
如果問題是方言,而不是 App
有時你根本不是在選平台,只是在決定該寫成什麼樣子。那就看該寫哪一種 Markdown 方言,它直接回答這題;GitHub 風格 Markdown 指南則記錄上表多數平台已收斂到的那套擴充語法。想從元素本身看起,就從 Markdown 語法總覽開始。
注意:不要用一小段文字測試可攜性,那種內容幾乎到哪都活得下來。搬一份真實文件,裡面要有表格、巢狀清單和註腳,因為壞掉的永遠是這三個。
相容性資料驗證日期
常見問題
哪些 App 支援 Markdown?
多數開發與寫作工具都支援:GitHub、GitLab、Obsidian、VS Code、Jupyter、Ghost、所有靜態網站產生器,以及 Notion、Bear 這類筆記軟體。聊天軟體只支援一部分:Discord 與 Slack 處理強調與程式碼,但不處理表格。上面的對照表比較了其中十一個平台。
Notion 支援 Markdown 嗎?
部分支援。Notion 接受 Markdown 作為輸入方式,打 ## 會建立標題,也能匯入與匯出 .md 檔。但它從不儲存 Markdown:符號轉成區塊之後就被丟掉。哪些快速鍵有效,詳見 Notion 的 Markdown。
為什麼我的表格在 GitHub 正常,在 Discord 或 Slack 卻不行?
因為表格屬於擴充語法,不是核心 Markdown。GitHub 實作了 GitHub 風格 Markdown 的整組擴充,Discord 與 Slack 則刻意只實作針對短訊息的一小部分。你的表格沒有寫錯,是對面的剖析器沒有處理它的規則。
可以把筆記從 Notion 搬到 Obsidian 嗎?
可以,用 Notion 的 Markdown 匯出,但要有整理的心理準備。標題、清單、強調、程式碼與連結都會順利過去;資料庫、折疊區塊、callout 與嵌入內容則沒有對應的純 Markdown 寫法。反方向搬容易得多,這正是「在會保存 .md 的工具裡起草」的理由。
有沒有一套到處都能用的 Markdown?
有,只是比你想要的更小:標題、粗體、斜體、清單、連結、圖片、行內程式碼、程式碼圍欄與引用區塊。其餘全部看平台。用這組子集寫作,是讓文件保持可攜最可靠的做法。
延伸閱讀
立即使用編輯器
立即使用編輯器