給想學(xué)Markdown的你的一個簡單的Markdown語法教程

這篇文章是對我所知道的常用、兼容性較好的Markdown語法的一個簡單的總結(jié),文中所有的語法在Typora編輯器和簡書上都可以正確顯示,如有錯漏之處,煩請指正。

什么是Markdown?

我覺得對HTML比較熟悉的同學(xué)可能會很容易地回答出這個問題——Markdown其實就是一個輕量級、用來編寫文檔的更易用的HTML。

當(dāng)然,對于沒有基礎(chǔ)的同學(xué),可以暫時這么認為:Markdown是一門標(biāo)記語言,可以算是簡化版的Word,但是你不需要為了設(shè)置各種格式而用鼠標(biāo)點來點去了,一切格式的控制都像HTML一樣,用代碼就可以完成。

Markdown文件的擴展名是.md,建文件的時候不要建錯了。

注意:Markdown的各種符號都是英文符,尤其要注意圓括號也是英文的圓括號。

Markdown編輯器推薦

在開始學(xué)習(xí)之前,肯定需要一份趁手的工具。

Markdown最好用專門編輯Markdown的編輯器來寫。這里推薦幾個我比較喜歡的Markdown編輯器,在學(xué)習(xí)Markdown語法之前可以先了解一下它們:

Typora

說到Markdown編輯器,肯定首推Typora了,用過的人都知道它有多好用,而且還支持寫HTML,而且顏值非常高,還支持換主題。我這篇教程就是使用Typora寫出來的。

Typora跟絕大多數(shù)左邊編輯右邊預(yù)覽的Markdown編輯器都不同,是實時全屏預(yù)覽的——你打完之后,立馬就可以看到效果,看起來跟Word一樣,卻比Word簡潔的多。如果不滿意,也可以進源代碼模式再去改,當(dāng)然有些格式也是可以直接改的。

Typora還帶大綱功能,真的是十分方便,我用過的Markdown編輯器里除了帶目錄插件的VSCode和語雀之外還沒見過有哪個可以實時生成大綱的。

最重要的是:Typora是跨平臺的!跨平臺!跨平臺!跨平臺!重要的事情說三遍!帶Linux玩的都是好朋友!

Visual Studio Code

沒錯,大名鼎鼎的VSCode也是可以寫Markdown的(好像沒有VSCode做不到的事情),而且語法高亮還挺完備的,相關(guān)插件也有很多。個人感覺使用體驗僅次于Typora。

推薦裝一個Markdown Preview Enhanced插件,這樣就可以實時預(yù)覽了,還有個神器Markdown All in One也很好用,但是需要額外記一些快捷鍵。強烈建議裝一個markdownlint做語法規(guī)范檢查,畢竟Markdown的編碼規(guī)范還是挺重要的。

使用體驗上,除了不是實時全屏預(yù)覽以外,使用體驗跟Typora幾乎沒什么差別,就是VSCode的使用體驗。

最重要的是:VSCode也是跨平臺的!跨平臺!跨平臺!跨平臺!重要的事情說三遍!帶Linux玩的都是好朋友!

簡書

了解我的人應(yīng)該都知道我在簡書上寫了多少東西??陀^來說,作為在線的編輯器,雖然沒有語法高亮,但是簡書還是挺不錯的,容錯能力很強(比如標(biāo)題的#號后面不打空格、段內(nèi)換行不打空格這種不規(guī)范的寫法都能正確識別),實時預(yù)覽也做得很不錯。很多時候有些比較短的文章我不想在本地開Typora寫,就直接在簡書上寫了,還是挺舒服的。

最主要的還是簡書自帶圖床,不用為把圖片保存在哪里而發(fā)愁。

另外,簡書的廣告比CSDN少多了,界面也是我喜歡的風(fēng)格,這也是我推薦它而不是CSDN的原因。

簡書也支持富文本。

當(dāng)然,簡書也是跨平臺的!畢竟Web應(yīng)用從來都不會受平臺限制,只要有瀏覽器就能訪問。

Md2All

官網(wǎng):http://md.aclickall.com/

這個東西比較冷門,本來的作用是將Markdown格式轉(zhuǎn)換為富文本,但是單純用來編輯Markdown也是挺不錯的,如果你對CSS比較熟悉的話,你還可以把它生成的富文本變得非常漂亮。

不支持云同步,寫完之后記得保存到本地。

最大的缺點就是不帶語法高亮了。坦白來說,寫Markdown沒語法高亮是真的難受。

印象筆記/為知筆記

說到有云同步功能的,除了本來就是Web應(yīng)用、自帶云同步的簡書就是這兩個了吧。這兩個作為筆記類的軟件,也是很出名的。

雖然印象筆記是最近才有的Markdown功能,但是語法高亮還是挺不錯的,比為知筆記舒服一些,也可以實時預(yù)覽,我發(fā)在簡書上那篇Maven學(xué)習(xí)筆記就是用印象筆記寫的。為知筆記不是很推薦,沒高亮也沒實時預(yù)覽。

但是印象筆記那個Markdown。。。也是有夠難受的,支持很有限,而且……真的太丑了,比不上Typora不說,畢竟人家太無敵了,但是連VSCode甚至Markdown Pad都比不上,就有點說不過去了……

總之這倆不建議用,想要云同步的話直接用簡書就行了,還順便開通了個個人博客。當(dāng)然你也可以“曲線救國”,用堅果云、iCloud、OneDrive做云同步。比較邪門的玩法還可以在GitHub上建一個倉庫存你的筆記(論GitHub的錯誤正確用法)。

想看正經(jīng)推薦的到這里就可以往下翻去看教程了,以下幾個都是不正經(jīng)推薦。

Markdown Pad

Windows獨享。

我18年入門Markdown的時候使用的第一個編輯器,可以說是麻雀雖小五臟俱全吧,比較簡陋,但是功能還是比較完善的。

一個很大的亮點就是自帶圖床了,對圖片很友好,畢竟Markdown最大的短板應(yīng)該就是圖片了。

可以試試,但是不推薦日常使用。

Xcode

macOS獨享。

這是你沒見過的船新玩法。

一開始我以為這么玩的都是大佬,但是macOS默認打開Markdown文件的方式居然真的是Xcode,真是無力吐槽了。。。

不過客觀上來講,除了沒實時預(yù)覽,Xcode寫Markdown感覺還是挺不錯的,畢竟語法高亮比較完備,顏值也是真的高。雖然本身是個跟Visual Studio一樣的超重量級的IDE,但是平常使用的話還是感覺不大到。

真的會有人日常用這玩意寫Markdown嗎……

Vim

macOS/Linux獨享,Windows有移植版本不過巨難用。

這是你沒見過的船新玩法*2。

嗯,不用多說,玩Vim的都是大佬。

反正我玩不動,各種命令和快捷鍵都快記瘋了,也就寫代碼的時候開個Vim模擬器玩玩了。

但是有一說一,Vim帶語法高亮,確實可以寫Markdown。

標(biāo)題

Markdown一共支持六級標(biāo)題,與HTML的<h1><h6>作用相同。

寫法:是第幾級標(biāo)題就在前面寫幾個#,#后面打一個空格,然后再跟上標(biāo)題內(nèi)容。

一級標(biāo)題還有一種比較冷門的寫法,就是在標(biāo)題行的下一行打-,幾個都可以。Typora需要進入源代碼模式才能打出。因為實在太麻煩了,所以這種寫法不建議大家用,用剛才說的#就可以了。

不打空格的話大多數(shù)編輯器識別不了,但也有能識別的,比如簡書和Markdown Pad,Typora老版本好像也可以。但是出于標(biāo)準(zhǔn)、規(guī)范而言,大家還是應(yīng)該打一個空格。

注意:標(biāo)題前后都應(yīng)該有一個空行。

例如:

# 一級標(biāo)題
## 二級標(biāo)題
### 三級標(biāo)題
#### 四級標(biāo)題
##### 五級標(biāo)題
###### 六級標(biāo)題

效果:

一級標(biāo)題

二級標(biāo)題

三級標(biāo)題

四級標(biāo)題

五級標(biāo)題
六級標(biāo)題

注意:有的編輯器只支持四級標(biāo)題(例如語雀),所以建議大家最好不要使用超過四級標(biāo)題。

注意2:嚴格意義上,一篇Markdown只可以有一個一級標(biāo)題,但是看了許多人的Markdown,遵守這個規(guī)定的人實在是不多啊~(反正我也不遵守)

正文

Markdown的正文與HTML的<p>標(biāo)簽類似。但是在Markdown里不用任何標(biāo)識符,直接寫就是一個段落。

注意:嚴格意義上講,Markdown直接打一個回車并不是換行。它的換行方式有兩種:

換段落

兩個段落之間空出一行,就相當(dāng)于另起一段。

Markdown:

this is a paragraph

this is another paragraph

相當(dāng)于HTML:

<p>
  this is a paragraph
</p>
<p>
  this is another paragraph
</p>

效果:

this is a paragraph

this is another paragraph

注意:有的Markdown編輯器按回車默認換段落,例如Typora,有的就不會,例如簡書(一個回車默認識別為段內(nèi)換行)。

注意2:Markdown里打多少個回車都只識別為一個,所以打一個就夠了。

換行

段落內(nèi)換行的方式是一行后接兩個(有的編輯器好像需要四個)空格,再接一個回車。

這兩個空格加一個回車的作用相當(dāng)于HTML的<br>標(biāo)簽。

但是有的編輯器,只打一個回車也能被識別為段內(nèi)換行,比如Typora(需要在源代碼模式下)和簡書。

例如:

this is a line  
this is another line

相當(dāng)于HTML:

<p>
  this is a line<br>this is another line
</p>

效果:

this is a line
this is another line

注意:

目前絕大多數(shù)的編輯器都支持把單獨一個回車視為段內(nèi)換行,例如簡書和Typora(需要進入源代碼模式)。不過大家還是應(yīng)該在需要段內(nèi)換行的時候在行的末尾打至少兩個空格。

引用

Markdown的引用是非常簡單的,只要在引用行的開頭打一個>,再跟一個空格,這一行就變成引用了。

相當(dāng)于HTML的<blockquote>標(biāo)簽。

例如:

> 這是一段引用

相當(dāng)于HTML:

<blockquote>這是一段引用</blockquote>

效果:

這是一段引用

列表

注意:按照規(guī)范,列表與段落、標(biāo)題之間應(yīng)該空一行。

注意2:列表項之間不需要多空一行,也不需要在列表項的末尾打空格換行。列表項的每一項是自動獨立成一行的。

有序列表

有序列表的寫法很簡單,跟Word一樣,就是數(shù)字加上一個英文的.,再接一個空格。

相當(dāng)于HTML的<ol>+<li>。

例如:

1. first
2. second

相當(dāng)于HTML:

<ol>
  <li>first</li>
  <li>second</li>
</ol>

效果:

  1. first
  2. second

無序列表

Markdown的無序列表打法不止一種,這里只介紹最常用的兩種:-后跟一個空格或者+后跟一個空格。兩者可以混用,我一般用+加一個空格的打法。

相當(dāng)于HTML的<ul>+<li>。

例如:

- 123
+ 123

相當(dāng)于HTML:

<ul>
  <li>123</li>
  <li>123</li>
</ul>

效果:

  • 123
  • 123

任務(wù)列表

任務(wù)列表的打法相對復(fù)雜些,是- [ ]后跟一個空格。注意在Typora等實時預(yù)覽的編輯器里,打出的順序是:

  1. 先打出-[](方括號中間和減號后面無空格),然后后面打一個空格
  2. 方括號中間加一個空格
  3. 減號與左方括號之間加一個空格

打鉤的任務(wù)列表的方括號中間是一個x,就是小寫的x,沒有空格。

相當(dāng)于HTML<form>里的<input type="checkbox">,打鉤的就是有checked屬性的。

例如:

- [ ] 未完成
- [x] 已完成

相當(dāng)于HTML:

<form>
  <input type="checkbox" id="checkbox">
  <label for="checkbox">未完成</label>
  <br>
  <input type="checkbox" id="checkbox_checked" checked>
  <label for="checkbox_checked">已完成</label>
</form>

效果:

  • 未完成
  • 已完成

注意:有的編輯器在打有序列表和無序列表時不跟空格也可以識別,比如簡書和Markdown Pad,但是絕大多數(shù)都是無法識別的,所以建議大家按照標(biāo)準(zhǔn),在數(shù)字和符號后面跟一個空格。

加粗

非常簡單,用**包裹要加粗的內(nèi)容就可以了。

相當(dāng)于HTML的<strong>。

例如:

在Java中,被標(biāo)識為final的類**不能被繼承**。

相當(dāng)于HTML:

在Java中,被標(biāo)識為final的類<srong>不能被繼承</strong>。

效果:

在Java中,被標(biāo)識為final的類不能被繼承

斜體

與加粗打法很像,只不過斜體是打一個*而加粗是兩個。

相當(dāng)于HTML的<i>

例如:

*我是斜的*

相當(dāng)于HTML:

<i>我是斜的</i>

效果:

我是斜的

刪除線

刪除線的打法也非常簡單,使用兩個~包裹要畫刪除線的部分就可以了。

相當(dāng)于HTML的<strike>

例如:

~~看完這篇文章說不定你就可以入門HTML了~~

相當(dāng)于HTML:

<strike>看完這篇文章說不定你就可以入門HTML了</strike>

效果:

看完這篇文章說不定你就可以入門HTML了

行內(nèi)代碼/專有名詞

這個名字是我自己起的,因為我實在不知道它叫啥。。。

這個東西一般用來標(biāo)記專有名詞,或者一些簡單的代碼。

打法很簡單,就是用兩個`(就是Esc鍵下面,跟~在一起的那個,在英文下直接按就可以打出這個了。這個符號的名字其實叫“反引號”)把要標(biāo)記的部分包裹起來就行了。

相當(dāng)于HTML的<code>。

例如:

`Java`是世界上最好的語言

相當(dāng)于HTML:

<code>Java</code>是世界上最好的語言

效果:

Java是世界上最好的語言

代碼塊

代碼塊也有兩種打法,各有各的優(yōu)缺點。

注意:代碼塊前后都要與段落之間有一個空行。

第一種

第一種打法是三個`(就是剛才打行內(nèi)代碼時用到的那個,三個~也是可以的)加上你代碼的語言名稱,然后在代碼結(jié)束的地方再打三個。這也是我最常用的打法。

相當(dāng)于HTML的<pre>。

例如:

?```Java
package site.wendev.hello;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
?```

相當(dāng)于HTML:

<pre>
package site.wendev.hello;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
</pre>

效果:

package site.wendev.hello;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

注意:有的Markdown編輯器會自動補全結(jié)束的三個`,比如Typora,但絕大多數(shù)都不會,需要你自己把它打上。

第二種

這一種比較小眾,打起來也比較麻煩,不過我剛?cè)腴T的時候用的是這一種打法。

這種打法就是代碼塊所在的行前面先打四個空格,再打代碼。Typora需要進入源代碼模式才能打出來,相對來說Markdown Pad打這種會方便些。

例如:

    #include <iostream>
    using namespace std;

    int main() {
      cout << "Hello, World!" << endl;
      
      return 0;
    }

同樣相當(dāng)于HTML的<pre>標(biāo)簽。

效果:

#include <iostream>
using namespace std;

int main() {
  cout << "Hello, World!" << endl;
  
  return 0;
}

因為這種打法太麻煩了,也不便于代碼的批量復(fù)制粘貼,所以不建議大家使用。

超鏈接

超鏈接以及接下來要說的圖片可能對剛學(xué)的同學(xué)來說有點難理解,但是不用擔(dān)心,對照著HTML來是很簡單的。

超鏈接的打法是[](),其中方括號內(nèi)為超鏈接的文字,圓括號內(nèi)是超鏈接的地址。

注意這個方括號和圓括號都是英文的。

相當(dāng)于HTML的<a>標(biāo)簽,圓括號里的是<a>標(biāo)簽的href屬性,方括號里的是<a>標(biāo)簽的內(nèi)容。

例如:

[我的簡書](http://www.itdecent.cn/u/dc63550214af)

相當(dāng)于HTML:

<a href="http://www.itdecent.cn/u/dc63550214af">我的簡書</a>

效果:

我的簡書

圖片

圖片就是超鏈接前加上一個英文的!。方括號內(nèi)為圖片的圖注,圓括號內(nèi)為圖片的網(wǎng)絡(luò)地址或者本地地址。

相當(dāng)于HTML的<img>標(biāo)簽,圓括號里的是src屬性,方括號里的是alt屬性。

例如:

![我的首頁效果圖](https://upload-images.jianshu.io/upload_images/15800372-81b1c3f89eb4b9c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

相當(dāng)于HTML:

<img src="https://upload-images.jianshu.io/upload_images/15800372-81b1c3f89eb4b9c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="我的首頁效果圖">

效果:

我的首頁效果圖

表格

表格是最復(fù)雜的,也是最勸退新人的,所以我們放在最后來講。不過沒關(guān)系,掌握了以后你也可以很輕松地打出來。

表格相當(dāng)于HTML的<table>。

因為表格的組成比較復(fù)雜,我們分塊來講。

表格的打法有很多種,這里介紹我最常用的一種。

注意:表格也要跟正文之間空出一行。

表頭

表頭的打法是:

thead|thead|thead
-----|-----|-----

相當(dāng)于HTML的<thead>

上面的打法相當(dāng)于HTML的:

<thead>
    <tr>
    <td>thead</td>
    <td>thead</td>
    <td>thead</td>
  </tr>
</thead>

表頭的第一行是表頭的內(nèi)容,相互之間用|分隔開,|的個數(shù)是表格的列數(shù)減1。

然后緊接著一行是-|的組合,就是將第一行表頭的內(nèi)容換成-,幾個都可以,這一行是表頭與表格內(nèi)容的分界線。

表格內(nèi)容

表格內(nèi)容的打法與表頭一樣,都是:

tbody|tbody|tbody
tbody|tbody|tbody

兩列之間用一個|分隔開,行之間沒有分隔符,也不用多打空格來換行。

相當(dāng)于HTML的<tbody>。

上面的寫法相當(dāng)于HTML的:

    <tbody>
    <tr>
        <td>tbody</td>
        <td>tbody</td>
        <td>tbody</td>
    </tr>
    <tr>
        <td>tbody</td>
        <td>tbody</td>
        <td>tbody</td>
    </tr>
  </tbody>

綜上所述,整個表格的打法為:

thead|thead|thead
-----|-----|-----
tbody|tbody|tbody
tbody|tbody|tbody

相當(dāng)于HTML的:

<table>
  <thead>
        <tr>
        <td>thead</td>
        <td>thead</td>
        <td>thead</td>
    </tr>
    </thead>
  <tbody>
    <tr>
        <td>tbody</td>
        <td>tbody</td>
        <td>tbody</td>
    </tr>
  </tbody>
</table>

效果:

thead thead thead
tbody tbody tbody
tbody tbody tbody

注意:

似乎有些Markdown編輯器不認表格,也不知道是怎么回事。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容