為什麼 Discord 的 Markdown 這麼少

重點摘要
  • Discord 只渲染聊天尺寸的子集:強調、劇透、程式碼、引用,較新用戶端另外支援標題、清單與小字附註。
  • __文字__ 在這裡是底線而不是粗體,||文字|| 則會把內容藏進劇透色塊。
  • 圖片語法、表格、註腳、水平分隔線與原始 HTML 在訊息中一律不會渲染。
  • 只想要符號、不要樣式時,反引號是最快的跳脫手段。

它是聊天軟體,不是文件工具

Discord 保留了 Markdown 中能讓訊息更好讀的部分,捨棄了所有會讓單一使用者「重新排版整個頻道」的功能。所以沒有圖片語法、沒有表格、沒有註腳、標題只到第三層,也不支援原始 HTML。剩下的是一組精簡的行內樣式、程式碼區塊、引用,加上幾個 Discord 專屬的小功能。

Discord 在 Markdown 工具裡的位置

多數工具會落在同一條線的其中一側。Obsidian 把 Markdown 當成你自己的檔案保存,Notion 則把字元吞掉、改存區塊。Discord 是自成一格的第三種:你的星號會照原樣留著,編輯訊息時又會冒出來,但那則訊息是 Discord 資料庫裡的一筆資料,方言也是 Discord 自己的。把它當成聊天用的顯示語言,而不是文件格式。

兩個必須改掉的習慣

在標準 Markdown 與 GitHub 風格 Markdown 中,__文字__ 代表粗體,在 Discord 卻代表底線。而 ||文字|| 在標準 Markdown 裡完全沒有意義,在 Discord 則是劇透標記。不確定手上的工具說哪種方言時,可參考該用哪一種 Markdown 方言

插圖:聊天訊息泡泡中,純文字符號即時變成粗體、斜體與被遮住的劇透效果

任何訊息都能用的行內格式

以下語法在文字頻道、私訊、討論串與論壇貼文中都有效,合起來也涵蓋多數人真正會用到的部分。

**粗體文字**
*斜體文字*      (或 _斜體文字_)
***粗斜體***
__底線文字__
__*底線斜體*__
~~刪除線~~
||隱藏的劇透||
`行內程式碼`

最容易踩到的規則

符號必須緊貼文字。** 粗體 ** 這種星號內側有空格的寫法完全不會生效,這也是 Discord 上排版失敗的第一名原因。

符號可以疊加,**__粗體底線__** 是合法的,但配對必須層層包住,不能交錯。行內程式碼則是最強勢的符號:單個反引號內的內容一律原樣顯示,所以 `**不會變粗體**` 會直接印出星號。這也讓反引號成為保護整段文字最快的方法,這個習慣在程式碼區塊指南裡有更多說明。

注意:Discord 是在訊息送出時才套用格式,不是邊打邊套。要測試不確定的寫法,最安全的地方是傳一則私訊給自己。

劇透標記

兩條直線包住的文字會被灰色方塊蓋住,點擊或輕觸才顯示,訊息中任何位置都能用,包括引用區塊。附件也有自己的劇透做法,有兩種觸發方式:

  • 上傳對話框中先勾選劇透選項再送出。
  • 把檔名開頭改成 SPOILER_

兩種做法送出後圖片都會是模糊狀態,要點一下才看得到。Reddit 也有同樣的概念,但符號完全不同,寫法見 Reddit 排版指南

程式碼區塊與語法上色

程式碼區塊的寫法是:三個反引號、可選的語言名稱、換行、你的程式碼,最後再三個反引號。在 Discord 中結尾的反引號必須自成一行。按 Shift+Enter 可以換行而不送出訊息。

```python
def greet(name):
    return f"Hello, {name}"
```

哪些語言標籤有效

Discord 使用通用的語法上色函式庫,因此可用的標籤很多也很寬鬆。穩定且常用的包括 jstspython(或 py)、javacscppcgorustrubyphpswiftkotlinsqljsonyamlxmlhtmlcssbashshpowershellluarmd。寫錯標籤不會出錯,區塊只是不上色而已。

兩個值得知道的技巧

把區塊標成 diff 就能免費得到紅綠配色,因為以 -+ 開頭的行會被當成刪除與新增。要貼修改前後對照,或做一份彩色清單,這是最標準的做法。

```diff
+ 這一行是綠色
- 這一行是紅色
```

另外還有 ansi 標籤,會解讀終端機色碼,讓你替任意文字上色。它在桌面版、網頁版與較新的手機版可以顯示,在不支援的環境則退回成純文字。請把它當裝飾,不要拿來承載重要意義。

小提醒:單則訊息上限是 2,000 字元,反引號也算在內。超過就直接上傳成檔案,縮排不會跑掉,讀者也能直接下載。

引用、標題、清單與遮罩連結

一個 > 加空格可以引用一行。三個 >>> 會把該位置到訊息結尾的內容全變成引用,貼別人整段話時特別好用。Discord 不支援巢狀引用,引用中再放一個 > 只會顯示成字元,和引用區塊指南裡的巢狀寫法不同。

> 只引用這一行
這一行回到一般文字

>>> 這之後的全部內容
都留在引用裡
包括這一行

標題與清單

標題與清單來自 2023 年陸續推送的文字格式更新,算是相當新的功能。標題只有三層,井字號後面必須加空格。

# 大標題
## 中標題
### 小標題

- 項目符號
  - 巢狀項目
1. 編號項目
-# 小字附註

-# 附註前綴又更新,會顯示成灰色小字。在較舊或第三方用戶端上,上述任何一項都可能顯示成原始字元。要讓所有人都看得舒服的訊息,就只用粗體和斜體。

遮罩連結

遮罩連結的寫法是 [顯示文字](https://example.com)。它曾長期只能用在嵌入式訊息裡,所以舊教學才會說一般使用者不能用。在目前的用戶端上,一般訊息中也會生效,點擊陌生網域前還會跳出確認視窗。由於行為改過不只一次,重要的連結還是直接貼原始網址最保險。標準寫法與標題屬性見連結指南

Discord Markdown 支援對照表

下表以「一般使用者在文字頻道輸入」的情境為準。「較新用戶端」指 2023 年格式更新之後的桌面版、網頁版與手機版。

功能語法是否支援備註
粗體**文字**支援嵌入式訊息與引用中同樣有效
斜體*文字*_文字_支援兩種符號效果相同
粗斜體***文字***支援兩側各三個星號
底線__文字__支援Discord 專屬意義;標準 Markdown 視為粗體
刪除線~~文字~~支援與 GFM 相同
劇透||文字||支援Discord 擴充語法;點擊或輕觸顯示
行內程式碼`程式碼`支援內部所有其他格式一律失效
程式碼區塊三個反引號支援加語言標籤即可語法上色
單行引用> 文字支援箭號後面一定要有空格
多行引用>>> 文字支援引用訊息剩餘全部內容;不可巢狀
標題######較新用戶端只有三層;井字號後要空格
項目清單- 項目較新用戶端縮排兩個空格可做巢狀
編號清單1. 項目較新用戶端編號會自動重新排序
小字附註-# 文字最新用戶端灰色小字;比標題與清單更晚推出
遮罩連結[文字](網址)多數情況支援嵌入式訊息一向可用;現在一般訊息也可以,點擊前會有提示
圖片語法![替代文字](網址)不支援請直接上傳檔案,或貼原始圖片網址讓 Discord 展開
表格直線與破折號不支援直線符號會原樣顯示
註腳[^1]不支援顯示成純文字
水平分隔線---不支援三個破折號就只是三個破折號
原始 HTML<b>文字</b>不支援會被跳脫並以字元顯示

哪些會壞掉,以及該怎麼繞過

圖片與表格:直接用替代做法

這兩個缺口都沒有語法上的解法,所以直接跳到替代做法。圖片請直接上傳,或貼原始網址,Discord 多半會自己展開成預覽。表格則用程式碼區塊搭配手動對齊的欄位保留等寬格線,或直接截圖。

```
區域       第一季   第二季
亞太       412      503
歐非中東   288      301
```

資料真的非表格不可時,就在能渲染表格的地方做好再貼連結。標題列與對齊列的規則,見 Markdown 表格指南

跳脫:只要符號、不要樣式

在格式符號前面加一個反斜線,Discord 就會原樣印出該符號。這件事比想像中重要,因為檔名萬用字元、數學式與顏文字裡到處都是星號和底線。

\*保留星號\*        顯示為 *保留星號*
2 \* 3 \* 4        顯示為 2 * 3 * 4
snake\_case\_name   兩個底線都會保留

真正需要跳脫的字元不多:

  • *_,幾乎所有誤觸的斜體都來自它們。
  • ~,成對出現時會變成刪除線。
  • |,成對出現時會變成劇透。
  • 行首的 >,會變成引用。
  • 行首的 #-,在標題與清單上線後也要留意。

只要超過兩三個字元,用反引號都比一個個數反斜線省事。這個反射動作在其他工具也用得上,哪些平台跟 Discord 有同樣習慣,可以在平台總覽對照。

機器人、嵌入式訊息,以及桌面版與手機版的差異

機器人做得到、你打不出來的東西

以上談的都是真人在輸入框裡打字。機器人與 Webhook 還可以送出嵌入式訊息(embed):一種卡片結構,包含左側色條、可帶連結的標題、描述、最多二十五組欄位、圖片、頁尾與時間戳記。機器人那種整齊的方框輸出就是這樣來的,手打做不出來。

embed 內部的 Markdown 支援並不一致,值得逐項記住:

  • 描述欄與欄位內容支援完整訊息語法,包含遮罩連結與程式碼區塊。
  • 欄位名稱可用基本的粗體斜體,但不適合放連結。
  • 作者名稱與頁尾文字在多數用戶端上只當純文字處理。
  • 長度上限是描述 4,096 字元、整體 6,000 字元。

桌面版、網頁版與手機版

核心語法在三個平台上表現一致,差異都在邊緣。程式碼區塊的語法上色在手機版上線較晚、看起來也較樸素,長行會左右捲動而不換行,ansi 這類顏色技巧則在較舊的手機版本上最先失效。

注意:手機鍵盤本身就是風險。智慧標點會把直引號換成彎引號,壞掉的不是 Markdown,而是你貼上的那段程式碼。

接下來可以看什麼

Discord 並不是唯一有自家規則的聊天型方言。Reddit 的 Markdown 更貼近原始規格,很值得並排比較;Obsidian 則能看到同一套語法在「以檔案保存」的工具裡長什麼樣子。

需要完整標準而不是子集時,請開著Markdown 完整指南,旁邊再放一份可列印的語法速查表對照每天會用到的符號。

相容性資料驗證日期

常見問題

Discord 支援完整的 Markdown 嗎?

不支援。Discord 只提供為聊天設計的子集:粗體、斜體、底線、刪除線、劇透、行內程式碼、程式碼區塊、引用,以及較新用戶端上的標題、清單與小字附註。圖片語法、表格、註腳、水平分隔線與原始 HTML 都會顯示成原始字元。

Discord 的程式碼區塊怎麼打?

先打三個反引號與語言名稱(例如 python),按 Shift+Enter 換行貼上程式碼,最後在新的一行再打三個反引號收尾。語法上色就是靠語言標籤。只想標一個詞的話,單個反引號就夠了。

為什麼我的粗體在 Discord 沒有生效?

幾乎都是因為星號和文字之間有空格:** 文字 ** 不會生效,**文字** 才會。其他原因是跳脫時留下多餘的反斜線,或整段被反引號包住而刻意停用了格式。

如何讓 Discord 不要自動套用格式?

在想原樣顯示的字元前加反斜線,例如 \*星號\*,或把整段用反引號包起來。遇到檔案路徑、正規表達式這類長字串,反引號比逐一跳脫省事得多。

Discord 可以貼表格嗎?

用 Markdown 表格語法不行,直線符號會原樣顯示。替代做法是用程式碼區塊手動對齊欄位以維持等寬格線,或把別處做好的表格截圖貼上。機器人則可以用嵌入式訊息的欄位排出分欄效果。

延伸閱讀

立即使用編輯器

立即使用編輯器