Markdown 是一種帶標記的純文本格式岔擂。你可以在純文本中打上一些符號來表示文本的排版樣式屿讽,甚至插入外鏈的圖片穷遂。相比沒有多少排版格式可言的純文本來說它提供了基礎的常用排版樣式晌畅,幫助你凸顯文章的層次結構和關鍵信息玉组。相比于功能強大的 Word 來說敏储,它結構簡單易于上手阻星。雖然它不可能全方位替代 Word 之類的富文本編輯器或者專業(yè)排版工具,但是用來寫寫筆記已添、郵件或者博客文章還是挺好用的妥箕。
關于 Markdown 和 Word 的額外說明
對于平常不太接觸編程的人來說滥酥,有必要進一步解釋一下 Markdown 和 Word 的區(qū)別。計算機中的任何信息都是編碼成二進制數(shù)字的形式進行保存的畦幢。一般來說一個純文本文檔(Windows 記事本所生成的那種后綴為 .txt
的文件就是純文本文檔)僅僅基于字符編碼規(guī)則進行編碼坎吻,只能保存文本的文字組成而無法保存字體、樣式宇葱、顏色等排版信息禾怠。
要保存這些排版樣式信息就需要額外的約定和額外的空間。所以 Word 一般生成的文件不會是后綴為 .txt
的純文本文件而是后綴為 .docx
的專門的富文本(就是帶有排版信息和非文字信息的文本)格式贝搁。 .docx
文件會保存 .txt
文件中那樣的純文本字符編碼吗氏,但也會保存額外的表示各種排版樣式的編碼。
Markdown 的思路其實和 Word 差不多雷逆,也是用額外約定的編碼保存一些排版樣式信息弦讽。但是不同之處在于萌衬, Word 中保存排版樣式信息的這些編碼是不會給用戶看到的胯甩,由 Word 自動處理,用戶看到的只是 Word 根據(jù)編碼渲染后的狀態(tài)撒犀。而 Markdown 的涉及思路是某宪,即便用戶沒有合適的渲染工具仿村,也能以純文本形式打開 Markdown 文檔并保持文檔一定的可讀性。這就造成了 Markdown 和 Word 的極大不同兴喂。
當你的電腦上沒有安裝 Word 時蔼囊,別人發(fā)來的 .docx
文檔你是沒法查看的。即便解壓成文本文件衣迷,其中的各種復雜樣式標記也不適合人來了直接閱讀畏鼓。但一篇 Markdown 文檔即便不經(jīng)過任何渲染,大致也保持一個人能閱讀的狀態(tài)壶谒。
因此云矫,其實一些為了追求功能性,導致 Markdown 文本復雜度大大增加的拓展其實是有悖于 Markdown 的設計初衷的汗菜。
一般來說 Markdown 文件的后綴名設置為
.md
让禀,也有用.markdown
的。
標準和軟件
需要注意的是 Markdown 本身只是一種基于純文本的文件結構陨界。如果你用記事本之類的僅僅支持最基本純文本顯示的軟件打開巡揍,它也還是一個純文本。理論上你需要用一些工具軟件把它轉換成 HTML 或者 PDF 然后用相應的閱讀器打開才能看到格式普碎。不過一些編輯器會內置這些功能吼肥,讓你能直接預覽 Markdown 轉換渲染之后的樣子(VS Code 就是其中之一)录平。
對一般的文件格式或者描述性語言來說麻车,規(guī)則是抽象的缀皱,工具軟件是具體的。只要規(guī)則相同动猬,工具軟件可以隨便換啤斗。但是 Markdown 的情況卻比較復雜。其最初作者沒有給出 Markdown 的嚴謹語法定義赁咙,后來熱心開發(fā)者們創(chuàng)造的各種衍生版和拓展版又層出不窮钮莲。導致 Markdown 規(guī)則本身就存在混亂。這個軟件中寫好的 Markdown 到了那個軟件中彼水,顯示效果可能就不同了崔拥。因此擺脫開具體的 Markdown 編輯或瀏覽工具來談 Markdown 的語法規(guī)則有點空中樓閣的感覺。為此凤覆,特意在這里強調本文的 Markdown 主要基于以下規(guī)范和軟件:
- CommonMark 一個社區(qū)項目链瓦,對最初的 Markdown 語法規(guī)則進行了整理和規(guī)范。
- GitHub Flavored Markdown Spec 基于 CommonMark 并做了一些語法和功能拓展盯桦。由 GitHub 主導并為 GitHub 所支持(托管于 GitHub 的代碼倉庫中的 Markdown 文件會依據(jù)此協(xié)議渲染)慈俯。
- Typora 一款商業(yè) Markdown 編輯器,支持非常多的 Markdown 擴展語法和功能拥峦,還能自定義渲染樣式表贴膘。雖然其中一些功能可能是過度設計,但確實包括了不少很好用的功能略号。另外就是這款軟件的編輯方式設計比較獨特刑峡,可以在渲染后的界面和代碼界面中切換(而不是像一般軟件那樣左右兩欄對照)。就算不使用這款軟件編輯 Markdown玄柠,它官網(wǎng)上的 Markdown 拓展語法和功能介紹也值得參考氛琢。
- Visual Studio Code 微軟主導的開源純文本編輯器,自帶基本的 Markdown 支持随闪,可以通過插件支持拓展語法和功能阳似。具體的插件推薦在后文相關段落。
Visual Studio Code 基本功能插件
Visual Studio Code 對 Markdown 的基本支持是通過內建插件的方式實現(xiàn)的铐伴。這些內建插件不需要你額外安裝撮奏,而是集成到編輯器里的。你不能卸載它們当宴,但是可以停用它們畜吊。如果把這三個插件都停用掉,那么 VS Code 就完全失去了對 Markdown 的支持户矢,只能像處理普通純文本那樣處理它們玲献。其中最為基礎的是以下兩個。
語法高亮
插件 Markdown Language Basics 主要提供的是 Markdown 源碼的語法高亮功能。其 ID 是:
vscode.markdown
這個插件不能把你在 Markdown 中寫的標記符號轉換成相應的排版格式捌年。但是可以根據(jù)各種標記的語法屬性把他們染成不同顏色瓢娜,方便查看標記的語法結構。
此外據(jù)官方文檔中介紹這個插件還提供了 Markdown 的 Snippet 功能礼预,就是根據(jù)提示自動輸入大段格式化代碼眠砾。但是這個功能的快捷鍵不知道和什么東西沖突用不出來,而且這么多年也沒有修復[^SnippetBug]托酸。不過如果你想用的話還是可以通過
Ctrl+Shift+P
的按鍵組合呼出 Command Palette 然后鍵入Snippets: Insert Snippet
來選擇預制的格式化代碼段來插入褒颈。
渲染預覽
Markdown Language Features 這個插件則專門提供 Markdown 的渲染和預覽功能。其 ID 是:
vscode.markdown-language-features
當你以 Markdown 模式打開一個文本時右上角有一個預覽圖標励堡,點一下就能進入左右分欄模式谷丸,右邊顯示渲染預覽,左邊顯示 Markdown 源碼应结。
渲染的樣式是通過內置的 CSS 決定的淤井,不過這個插件也提供了一些設置選項可以控制渲染的樣式,例如渲染后頁面的字體就是獨立于 VS Code 的代碼字體單獨設置的摊趾。此外這個插件提供的渲染頁面的顏色主題會隨著 VS Code 的顏色主題變化币狠。如果你不喜歡這個渲染結果也可以找其他插件來改變渲染樣式。
關于這個內置插件砾层, VS Code 的插件頁面介紹不多漩绵。翻翻源碼就不難發(fā)現(xiàn),這個渲染插件其實是調用 markdown-it 實現(xiàn)的肛炮。 markdown-it 是基于 CommonMark 標準設計的止吐,但是默認做了一些拓展。例如默認加入了 GitHub Flavored Markdown 的表格和刪除線語法侨糟。因此這個插件相當于自帶了表格和刪除線的擴展語法碍扔。
寫給程序員的一些額外信息
對于一般用戶來說,對 Markdown 的編輯和渲染主要在各種面向最終用戶的編輯器中進行秕重。但是對于程序員來說不同,了解一點和代碼相關的信息總沒有壞處,
現(xiàn)在的 Markdown 編譯工具非常多溶耘,最初 Markdown 設計者推出的那個 Bug 滿滿 的版本已經(jīng)越來越少用了二拐。一般推薦使用 JS 庫 markdown-it 來將 Markdown 編譯為 HTML (如果覺得這個庫提供的語法功能不夠,還可以使用各種拓展庫來拓展它)凳兵。以下是一個調用 markdown-it 編譯 Markdown 的代碼示例(用 JS 寫的):
md=require('markdown-it')()
mytext='# hello\nI\'m**TaiXuan**'
myhtml=md.render(mytext)
console.log(myhtml)
此外百新,也可以使用命令行工具 Pandoc 來實現(xiàn) Markdown 對其他文本的轉化。以下是一個 shell 命令示例:
pandoc -s mytext.md -o myhtml.html
Typora 在將 Markdown 導出為其他文件格式時是依賴 Pandoc 的庐扫。
本文源碼采用 MIT 協(xié)議開放饭望,托管于: https://github.com/ZhiZe-ZG/ZZToolLibrary
如果覺得本文內容對您有用仗哨,希望您能在能力和意愿范圍內給我一些資助。我不以此為生铅辞,但我也是個普通人厌漂。