Markdown 完全入門(上)

為什麼我要寫這篇教程

思考是人類活動的核心之一,而文字則是記錄思考的成果最重要的媒介之一。而讓絢爛的文學成為實體的工具——筆,也成了人類記憶中不可磨滅的一部分。正如《仲夏夜之夢》中莎士比亞說:

當想像力

使未知事物有了形狀

當詩人的筆

讓它們成形並給空中的虛無

一處居所

一個名號

Markdown,這個至今沒有中文譯名的書寫工具,作為比特世界的「筆」,自被發明之初就隨著博客發展的浪潮傳向互聯網的每一片大陸,成為新聞民主化進程中的重要工具。不過它的擁躉在為它唱讚歌的同時,更多的人或膽怯於它陌生的使用方式,或不屑於它複雜的標記字元,始終沒有領略這一工具的優雅。

感謝開發者的持續耕耘,優秀的 Markdown 工具層出不窮。時至今日,一款 Markdown 工具,已經不再是(也不應該是)少數重度寫作者的選擇,它的易用和實用,能惠及到每一個對文字輸入有需求的用戶,讓腦子的思緒化為踏實的文字。

在優秀編輯器不斷湧現的背景下,中文互聯網上卻難覓一篇合適的 Markdown 入門文章。多番對比之下發現,目前的教程普遍有兩個問題:

  1. 對 Markdown 的本質和對比富文本編輯器(Word)的優勢不做說明,只是泛泛而談(例如「輸入效率高」之類的口號)。沒有引導讀者真正去認識和了解 Markdown,容易讓初學者一頭霧水地開始嘗試,在稍受挫折後質疑使用 Markdown 的意義,從而放棄。
  2. 對 Markdown 的語法只做簡單的羅列。誠然,Markdown 的基本語法非常簡明,但是站在初學者角度來看,依然十分反直覺1 。再加上 Markdown 的語法在不同工具中各有稍許不同,如果不對基本語法進行有邏輯的說明,使用者深入使用時會覺得越來越複雜。

所以本文的目的也變得十分清晰:

  1. 首先希望不了解 Markdown 的用戶真正地理解這個工具的本質和優勢,解決「為什麼我要用 Markdown」這個元問題
  2. 其次是對 Markdwon 的語法有著有邏輯的了解,以免陷入各個語法版本的混亂之中,這就解決了「怎麼使用 Markdown」的問題
  3. 最後就是工具的選擇和使用場景的介紹,來幫助你開啟使用 Markdown 之路。

儘管 Markdown 作為工具的本身並不複雜,但是其背後的邏輯性,以及十年來的演進所衍生出的各種變體,讓這個話題也不能僅靠三言兩語來解釋,所以我們會分為上下兩篇來走完這份《完全入門指南》。在上篇中我們專註於 Markdown 的本身,也探討它的實質和優勢,介紹它的語法。下篇我們去探索十餘年來 Markdown 所發展出的世界,了解不同的 Markdown 衍生語法和工具。

初步認識 Markdown

Markdown 和常見的富文本編輯器有什麼區別

如果只輸入不帶任何格式的文字,無需任何複雜的工具。正是為了賦予文字不同的「外貌」(即格式或者樣式),我們才需要文字編輯器。例如輸入的文字屬於純文本(即不帶格式),而給文字標記上的顏色則屬於文字的樣式。對於用戶來說,Markdown 編輯器和富文本編輯器(例如 Word2 )的作用是一致的:使用者輸入純文字,通過編輯器的處理,使其擁有一份樣式,最終得到帶格式的文檔。

然而這兩者的差距,就在處理文字的過程中。富文本編輯器以 Word 為例,輸入文字後,選擇不同的功能(通常是通過點擊某個圖標),例如加粗或者調整字體大小,處理後的效果直接顯示在屏幕上,與列印出來的效果相同。所以富文本編輯器又叫「所見即所得」編輯器。

而 Markdown 編輯器則不同,輸入文字後通常是在文字的前後同時輸入一些標記字元,輸入後在編輯窗口也不會即時的顯示出效果3 。需要手動切換進預覽模式查看處理效果。因為這些標記字元的存在,所以 Markdown 本身是一種標記語言。

Markdown 的本質

如果仔細觀察這兩種編輯器和我們日常使用它們的習慣,就能更深一步理解這兩種工具的差異。在編輯文稿時,我們其實不是像小時候在格子紙中寫文章那樣一氣呵成,而是不斷的在「輸入文字」和「編輯文字」兩個狀態中切換。富文本編輯器「編輯文字」是通過點擊圖形化的功能按鈕來實現,Markdown 編輯器則是通過標記字元去編輯。所以 Markdown 的核心就在於通過輸入字元同時進行排版和內容輸入。

當理解了「為什麼 Markdown 里有那麼多和內容無關的字元」這個問題之後,隨之而來的可能就是兩個概念的混淆——Markdown 語法和 Markdown 編輯器。我們口中常說的 Markdown 到底指什麼呢。其實 Markdown 的創始人 John Gruber 這樣定義:

"Markdown" is two things:

(1) a plain text formatting syntax;

(2) a software tool, that converts the plain text formatting to others.

通俗的說,首先Markdown 意味著一套標記語法,這些標記字元就是用來賦予文字不同格式;其次,能將標記字元轉換,最終呈現出我們想要的排版效果的軟體,就是所謂的 Markdown 編輯器。目前除了那些為了 Markdown 專門開發的編輯器之外,你會看到一些網站(例如簡書)或者應用(例如 Airmail 的 Mac 版)註明「支持 Markdown」,這意味著他們的編輯器也可以完成將標記字元轉換的過程。

Markdown 的優勢

經過前面的鋪墊,我相信你已經能體會 Markdown 的特殊之處。而正是這些乍看之下有些怪異的設計,讓它形成了自己的獨特優勢。為了能更直觀的體會 Markdown 的不同之處,建議在閱讀的同時打開 Cmd 在線編輯器 嘗試下面的簡單例子(如果只是想試用而不想註冊,可以全選,然後刪除當前頁面的文字)。別擔心不理解那些標記字元的含義,在後文中會有相應的解釋。

書寫過程流暢

如前文中所講,用富文本編輯器編輯文字時是兩個不連續的動作,輸入文字時雙手放在鍵盤上,編輯文字則需要視線和手離開輸入框和鍵盤,去尋找和點擊功能按鈕。很少人使用 Word 時是一次性輸入全部文字後,再去一次性的編輯文字格式(然而這卻是使用 Word 相對較高效的方式)。

而 Markdown 的「書寫流暢」就體現在將這兩個動作合成一個輸入字元的動作。視線一直固定在游標處,手也不需要移動,只是輸入時使用不同的字元——文本字元和標記字元——就能同時完成編輯和輸入。這種體驗類似紙筆時代的書寫,使用者全部的注意力都可以集中在將大腦中的語句輸出,而不用不停地切換。

例 1:試著在編輯框中輸入下面這段字元:

尼采說:> Was mich nicht umbringt, macht mich **st?rker**.

你會發現引用的句子已經被展示成了特殊的樣式,而 st?rker 這個單詞也被加粗了。可以試試或回想下如果在 Word 上要如何實現這個效果。

格式不隨編輯器而改變,導出與分享方便

如果你有足夠多使用 Word 的經歷,一定會體驗過「同一份 Word 文檔,在不同地方打開就變得不同」這樣的魔幻現實主義色彩的經歷。不同版本、不同平台之間的 Word 的文檔由於軟體工程方面的原因,一直不能保證「在任何地方打開都顯示同樣的效果」,更別說 WPS 這類第三方的軟體。這讓通過 Word 格式來分享文檔顯得不夠保險。

而 Markdown 則完全規避了硬體、編輯器和平台差異帶來的問題。由於所有編輯器是基於一套 Markdown 語法來編寫轉換流程,就能保證在任何地方,打開來都是同樣的格式。更安心的是,由於 Markdown 格式保持的文件本質上仍是一份純文本,就能保證目前任何平台都有工具可以打開它,而不用擔心對方是 Mac, 會不會打不開 Word 的場景。所以以 Markdown 格式來分享文檔,遠比富文本格式省心。

前文我們說過,Markdown 編輯器其實是負責將 Markdown 語法標記符轉換成其他格式,這暗示了 Markdown 格式的導出也十分方便,因為這個轉換的目標是可以隨時變換的。以 MarkEditor 為例,除了常見的 PDF 、HTML 和富文本格式(可以直接保持格式粘貼到 Word 中),還可以複製為微信公眾號格式。

書寫錯誤易發現

任何程度的使用者,在這兩類工具的使用過程中都會出現使用錯誤4 ,這是不可避免的。然而 Word 的問題就在於,雖然所見即所得的界面讓它可以即時的發現問題,但是由於它將編輯的過程交給了圖形化的功能按鍵,出現問題時就無法回溯問題所在之處。例如選中一個單詞設為粗體後,接下來輸入的文字沒有變回默認的字重這類錯誤。其次由於它的功能複雜程度很高,使用者可能沒有正確的理解功能的使用場景,而只是做到了看上去排好了。例如常見的用空格而非分頁符來分頁,或者用空格來對齊,隨後產生的排版問題,也很難直接在編輯界面中發現。

而 Markdown 由於是使用標記字元來控制排版,所以你在預覽時發現的錯誤都可以直接在文稿中去查看,到底是標記字元輸入錯了,還是漏掉了字元。很多時候我們不會意識到這也是一個優勢,但是在長期的使用中,就會體會到能快速發現問題和解決問題所給人帶來的愉悅。

例 2:試著在編輯框中輸入下面這段字元:

尼采說:> Was mich **nicht umbringt, macht mich **st?rker**.

還是第一個例子中的那句話,但是這次我想把「nicht」和「st?rker」這兩個詞都加粗,加粗的標記字元是文字前後加上**,但是這時發現加粗的文字是錯誤的,通過看查看文稿你會很容易發現「nicht」這個詞的後面忘了加上標記字元。

當然 Markdown 還有其他一些優勢,例如可選的工具多樣之類的,但是我認為這都不是它所具有的決定性的優勢。上述三點都和 Markdown 的本質——標記語言——有關,這也是 Markdown 和富文本編輯的本質差異,也是富文本編輯器無論如何改進都不可能跨越的鴻溝。

了解基本 Markdown 語法

在對 Markdown 有了初步的認識後,我們可以真正地去了解這套略顯「神秘」的標記語法。說它神秘只是因為對完全不了解編程語言的人來說,通過字元來實現功能仍顯得不直觀和缺乏邏輯。換句話說,作為初學者,真的只能去死記硬背這套語法嗎?看似雜亂瑣碎的標記字元之間有沒有什麼邏輯呢?

其實想到 Markdown 和其他富文本編輯器一樣,都是用來編輯文字的功能,就不會有太多的恐懼,Markdown 語法只是將我們在富文本編輯器中常用的功能,換一種方式呈現出來了而已。下面我們就以來源於 John Gruber 最早定義的一套基本語法 為例,來了解 Markdown 主要的三大類標記字元。

這裡提醒一下,下面不會羅列出所有的標記字元,因為看一遍並不會幫你記住這些標記字元。你可以在 這裡 查看完整的文檔。下面主要是對看似毫無邏輯的語法進行梳理,希望幫你有序的理解。

第一類:對文字樣式的編輯

編輯器最基本的功能,就是對文字本身加以處理。例如對文字加粗,在Markdown 中通過** **來實現。其實在 Word 中就對應工具欄中的「字體」選項,同類的標記字元還有 * * 來實現斜體。如果你在編輯器中寫成

例 3:

**演示粗體***演示斜體*

最終會顯示為:

演示 演示斜體

可以看出來,通過這些字元就改變了文字本身的屬性。

第二類:對段落的編輯

相較於對「字」的編輯,更高一層的就是對「段落」的編輯,對應在 Word 中其實也是工具欄的「段落」選項。和第一類字元稍有不同,這些字元會把一些段落變成特殊格式的段落。例如 + 實現列表,# 實現標題效果,> 將一段文字變為引用,或者簡單不加任何字元,但是在段落前縮進,就會顯示出代碼塊。

注意:這些標記字元和文字之間有一個空格,且都為英語的符號。

例 4:

+ 演示列表 + 列表還可以有層級 > 這是引用文字的效果

最終會顯示為:

  • 演示列表
    • 列表還可以有層級

這是引用文字的效果

第三類:插入文章其他元素

正如 Word 中的「插入」選項一樣,Markdown 也不僅僅只編輯文字,而是可以將不同的元素放入文檔中。最常見的就是通過 []() 來插入鏈接和 ![]() 來插入圖片(可以是本地圖片也可以是網路圖片)

例 5:

[少數派](https://sspai.com)![](https://cdn.sspai.com/attachment/thumbnail/2016/11/04/264631b984633898c415a818b181e5205653e_mw_640.jpg)

注意:插入網路鏈接和圖片的書寫方式不止上面演示的一種,更全面的介紹可以查看 完整文檔。

Markdown 全部的標記字元基本就可以被分為這三類,如果你一時間無法記住,完全沒有必要擔心,需要時去翻看文檔,嘗試用 Markdown 語法寫一兩次文章,你就會發現,這個數量級的標記字元很快就可以記住了。

看到這裡,你應該已經大致理解了 Markdown 為何物,已經 Markdown 相對於更常見的富文本編輯器的優勢。然而,你會發現僅靠著基本的 Markdown 語法,還不能立即用完成一些稍顯複雜的任務。在下篇中,我們就會更貼近實際應用,去看看不同的 Markdown 語法是如果拓展了它的功能,以及市面上有哪些工具值得推薦。


  • John Gruber 編寫的 Mardown 基本介紹和語法
  • 簡體中文版的 Markdown 基本介紹和語法(翻譯自 John Gruber 的版本)
  • 《為什麼作家應該用 Markdown 保持自己的文稿》
  • 《為什麼文科生也該用markdown寫作?》

推薦閱讀:

Markdown 完全入門(下)

TAG:Markdown | Markdown語法 |