Markdown 完全入門(上)
為什麼我要寫這篇教程
思考是人類活動的核心之一,而文字則是記錄思考的成果最重要的媒介之一。而讓絢爛的文學成為實體的工具——筆,也成了人類記憶中不可磨滅的一部分。正如《仲夏夜之夢》中莎士比亞說:
當想像力
使未知事物有了形狀當詩人的筆讓它們成形並給空中的虛無一處居所
一個名號
Markdown,這個至今沒有中文譯名的書寫工具,作為比特世界的「筆」,自被發明之初就隨著博客發展的浪潮傳向互聯網的每一片大陸,成為新聞民主化進程中的重要工具。不過它的擁躉在為它唱讚歌的同時,更多的人或膽怯於它陌生的使用方式,或不屑於它複雜的標記字元,始終沒有領略這一工具的優雅。
感謝開發者的持續耕耘,優秀的 Markdown 工具層出不窮。時至今日,一款 Markdown 工具,已經不再是(也不應該是)少數重度寫作者的選擇,它的易用和實用,能惠及到每一個對文字輸入有需求的用戶,讓腦子的思緒化為踏實的文字。
在優秀編輯器不斷湧現的背景下,中文互聯網上卻難覓一篇合適的 Markdown 入門文章。多番對比之下發現,目前的教程普遍有兩個問題:
- 對 Markdown 的本質和對比富文本編輯器(Word)的優勢不做說明,只是泛泛而談(例如「輸入效率高」之類的口號)。沒有引導讀者真正去認識和了解 Markdown,容易讓初學者一頭霧水地開始嘗試,在稍受挫折後質疑使用 Markdown 的意義,從而放棄。
- 對 Markdown 的語法只做簡單的羅列。誠然,Markdown 的基本語法非常簡明,但是站在初學者角度來看,依然十分反直覺1 。再加上 Markdown 的語法在不同工具中各有稍許不同,如果不對基本語法進行有邏輯的說明,使用者深入使用時會覺得越來越複雜。
所以本文的目的也變得十分清晰:
- 首先希望不了解 Markdown 的用戶真正地理解這個工具的本質和優勢,解決「為什麼我要用 Markdown」這個元問題
- 其次是對 Markdwon 的語法有著有邏輯的了解,以免陷入各個語法版本的混亂之中,這就解決了「怎麼使用 Markdown」的問題
- 最後就是工具的選擇和使用場景的介紹,來幫助你開啟使用 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寫作?》
推薦閱讀:
TAG:Markdown | Markdown語法 |