VS Code 使用指南

2021-12-26 前端工匠

文章主要內容:

廢話不多說,我們直接開始吧。

正文VS Code 概覽VS Code 介紹

Visual Studio Code (下面簡稱VSC) 是由微軟公司開發的開源、免費、跨平臺的代碼編輯器。

微軟希望它在保持核心輕量化文本編輯器的基礎上,為編輯器添加項目支持、智能感知和編譯調試。

Visual Studio Code

VSC 的前身是微軟基於雲端的編輯器項目:Monaco 編輯器,它作為微軟雲服務的一部分,提供在線編輯原始碼的能力。

VSC Team 由著名工程師 Erich Gamma 領導,Erich 是《設計模式》作者之一,Eclipse 之父,擁有多年的 IDE 開發經驗。

Erich Gamma

由於雲端編輯器的種種限制,和微軟近年來對Windows外平臺的態度轉變,微軟決定由它擴展開發為一個全平臺通用的代碼編輯器。

VS Code 技術路線

VSCode 採用了 Electron,使用的代碼編輯器名為 Monaco。

在語言上,VSCode 使用了 HTML,CSS,TypeScript 進行開發,使用 Electron 作為構建工具。

從實現上來看:

Electron = Node + Chromium + Native API

也就是說 Electron 擁有 Node 運行環境,賦予了用戶與系統底層進行交互的能力。

依靠 Chromium 提供基於 Web 技術(HTML、CSS、JS)的界面交互支持,另外還具有一些平臺特性,比如桌面通知等。

VS Code 技術組成Electron

為了保護本地文件的安全性,瀏覽器都沒有提供直接的本地文件訪問權限。

為了實現本地文件系統的訪問,VSC 採用了 Github 的開源項目 Electron。

Electron 原名 Atom-Shell,是 Github 為 Atom 編輯器編寫的一個開源框架。

它將 Chromium 和 Node.js 完美融合,讓開發者能用使用 HTML 來實現 App UI,用 Node.js API 來訪問文件系統。

TypeScript

VSC 的主要代碼都是用 TypeScript 編寫,目前 VSC 的核心有 1100 多個 TS 文件,TypeScript 的語言優勢為多次重構提供了保障。

純 DOM 操作

為了保證 UI 響應速度,VSC 沒有採用現有的 UI 庫,大部分 UI 採用絕對尺寸,簡單粗暴的避免大面積 UI 的聯動刷新。

VS Code 為優化性能做的努力

VS Code team 做了很多工作來提高 VSC 的性能。

VS Code 啟動速度優化

基於 HTML 技術的編輯器,受限於 Chrome 一般都會有啟動速度慢的問題。

除了基本的 JS / CSS 合併壓縮外,VSC 還將特別常用的 ActivityBar icon 直接內嵌在了 css 中。

但是即便如此,啟動速度跟 Sublime Text 等編輯器還是有比較大的差距。

這裡說一個技巧,當我們用 VSC 打開一個文件的時候,VSC 會默認啟動一個新的 VSC 窗口,這樣啟動的時間比較長,我們可以通過設置全局設置項裡的 window.openFilesInNewWindow: false 來使用已經打開的 VSC 實例打開新文件,這樣就幾乎沒有了等待的時間。

VS Code 代碼編輯器滾動虛擬化

讓編輯器只渲染可見的部分,減小大文件編輯對瀏覽器的壓力。

同時配合 css translate3d, 避免重複渲染沒有改變的代碼行。

VS Code 著色速度優化

為了不重複發明輪子,VSC 採用了跟 TextMate 一樣的代碼著色分析語法。

它是基於正則表達式的一套分析方案,雖然 JS 原生支持正則表達式,但為了更高的效率,VSC 使用了 C++ 編寫的一套正則表達式引擎來提高效率。

VS Code 多進程架構

前面講的這些都只是一些小的優化,真正保證響應速度的還是多進程架構帶來的優勢。

VS Code 多進程架構

VSC 採用多進程架構,VSC 啟動後主要有下面的幾個進程:

後臺進程

後臺進程是 VSC 的入口,主要負責管理編輯器生命周期,進程間通信,自動更新,菜單管理等。

我們啟動 VSC 的時候,後臺進程會首先啟動,讀取各種配置信息和歷史記錄,然後將這些信息和主窗口 UI 的 HTML 主文件路徑整合成一個 URL,啟動一個瀏覽器窗口來顯示編輯器的 UI。

後臺進程會一直關注 UI 進程的狀態,當所有 UI 進程被關閉的時候,整個編輯器退出。

此外後臺進程還會開啟一個本地的 Socket,當有新的 VSC 進程啟動的時候,會嘗試連接這個 Socket,並將啟動的參數信息傳遞給它,由已經存在的 VSC 來執行相關的動作,這樣能夠保證 VSC 的唯一性,避免出現多開文件夾帶來的問題。

編輯器窗口

編輯器窗口進程負責整個 UI 的展示。

也就是我們所見的部分, UI 全部用 HTML 編寫沒有太多需要介紹的部分。

IO

項目文件的讀取和保存由主進程的 NodeJS API 完成,因為全部是異步操作,即便有比較大的文件,也不會對 UI 造成阻塞。

IO 跟 UI 在一個進程,並採用異步操作,在保證 IO 性能的基礎上也保證了 UI 的響應速度。

插件進程

每一個 UI 窗口會啟動一個 NodeJS 子進程作為插件的宿主進程。所有的插件會共同運行在這個進程中。

這樣設計最主要的目的就是: 避免複雜的插件系統阻塞 UI 的響應。這要從JS和瀏覽器說起。

在大部分的作業系統中,顯示器的刷新頻率是 60 幀每秒,也就是說應用需要在 16.7 毫秒內完成所有的計算和 UI 刷新。

HTML DOM 的速度向來為人詬病,留給JS的時間就更少了。所以要在這麼短的時間內完成所有指令才能保證 UI 的響應速度。

但是事實上我們很難在這麼短的時間內完成諸如對一萬行代碼進行著色這種任務。這就需要我們將這種耗時比較長的任務轉移到其他的線程或進程來做,等耗時任務結束,再將結果返回給 UI 進程即可。

VSC 最近的版本中, 將所有的語言支持都改成了插件。包括之前在 UI 進程用 Web Worker 實現的 Markdown 語言支持。後面我會介紹一個典型的語言服務的工作方式。

但是將插件放在一個單獨進程也有很明顯的缺點,因為是一個單獨的進程,而不是 UI 進程,所以沒有辦法直接訪問 DOM 樹,想要實時高效的改變 UI 變得很難,在 VSC 的擴展體系中幾乎沒有對 UI 進行擴展的 API。

Debug 進程

Debugger 插件跟普通的插件有一點區別,它不運行在插件進程中,而是在每次 debug 的時候由UI單獨新開一個進程。

搜索進程

搜索是一個十分耗時的任務,VSC 也使用的單獨的進程來實現這個功能,保證主窗口的效率。

將耗時的任務分到多個進程中,有效的保證了主進程的響應速度。

VSCode 技術架構與核心VS Code 技術架構

分層架構值得我們好好學習。

源碼目錄結構VSCode 核心核心層editor: 微軟 Monaco 編輯器,也可獨立運行使用wrokbench: 配合 Monaco 並且給 viewlets 提供框架:如:瀏覽器狀態欄,菜單欄利用 electron 實現桌面程序核心組件Electron: 原名 Atom Shell, 是由Github 開發的開源框架。Momaco Edictor: VSC 最核心的組件。Typescript: Javascript 的嚴格超集。Language Server Protocol: 語言伺服器, 提供了諸如自動補全, 定義跳轉,代碼格式化等與程式語言相關的功能。Degug Adaptor Protocol: DAP 是一個基於JSON 的協議, 他抽象了開發工具與調試工具之間的通信。Xterm.js: 是一個使用TS 開發的前端組件, 它把完整的終端功能帶入了瀏覽器,可可以與bash這樣的進程相連接。

這裡簡單展示一下 LSP 和 DAP :

https://code.visualstudio.com/api/language-extensions/language-server-extension-guide

沒有 DAP 的結構:

具備 DAP 的結構:

https://code.visualstudio.com/blogs/2018/08/07/debug-adapter-protocol-website

又一次體現了分層的思想。

核心環境

整個項目完全使用 typescript 實現,electron 中運行主進程和渲染進程,使用的 api 有所不同,所以在 core 中每個目錄組織也是按照使用的 api 來安排。

運行的環境分為幾類:

common: 只使用 javascritp api 的代碼,能在任何環境下運行browser: 瀏覽器 api, 如操作 dom; 可以調用 commonnode: 需要使用 node 的 api,比如文件 io 操作electron-brower: 渲染進程 api, 可以調用 common, brower, node, 依賴electron renderer-process APIelectron-main: 主進程 api, 可以調用: common, node 依賴於electron main-process APIVS Code 語言支持

VS code 幾乎支持所有主流的程式語言。

對於JS, TS, CSS, HTML, VS code 提供了開箱即用的支持, 但對於其他語言來說, 則需要安裝相應的插件。

目前下載量最高的語言插件排行:

VS Code 插件系統

插件系統對 VSC 至關重要。

為什麼 ?

在早期的版本中 VSC 並沒有插件系統,只支持 TypeScript、JavaScript和C#的智能感知, 還有其餘40種語言的代碼著色。

所以 VSC 只是出現在微軟技術的社區中。15 年 12 月份,VSC 發布了第一個支持擴展的版本。

不久之後就出現了許多其他語言的支持,比如 Go 語言、C++、Java、Python、Ruby。

所以說有了核心編輯器的極速體驗,加上良好的擴展能力才成就了 VSC。

語言支持

VSC 制訂了一套完善的語言支持體系,方便支持新的程式語言。

一個代碼編輯器需要哪些功能來支持一種新語言?

兼容 TextMate 的代碼著色分析

可以簡單的將 TextMate 的語言著色配置文件拷貝到插件中,並在 package.json 中指定即可。

語言支持通用協議

VSC 約定了一種通用的通信協議來支持多種語言

由於 VSC 採用多進程的架構,語言的開發者可以使用自己熟悉的語言編寫這門語言的語言服務,VSC 將採用 JSON-RPC 通信的方式跟語言服務溝通,執行用戶命令,獲取結果。

Debugger

同語言服務類似,VSC 開放了一組通用協議來滿足不同語言不同平臺的調試需求。

主題/配色方案

VSC 採用了跟 TextMate 相同的配色方案文件格式。

編輯器輔助

VSC 提供了編輯器操作 API,你能夠實時獲取用戶輸入點、當前文件代碼。從而可以根據用戶當前文檔確定可以提供的快捷操作。比如自動添加不存在的方法等。

擴展命令

開發者可以在插件中定義自己的命令,這些命令會出現在「命令面板」 中,開發者可以通過 ctrl/cmd + shift + p 或 F1 來調用這些命令,完成複雜的操作。

插件可以使用所有的 NodeJS API,配合各種 NodeJS 庫,能夠完成非常有想像力的功能。

擴展菜單

VSC 提供了文件管理器菜單,編輯器菜單,文件標題菜單擴展點。方便開發者針對不同的上下文進行操作。

快捷鍵

開發者可以為各種自定義操作指定快捷鍵。

VS Code 插件開發

VSC 插件開發文檔:https://code.visualstudio.com/api

Wing 插件開發文檔:http://developer.egret.com/cn/github/egret-docs/Wing/introduction/index.html

VSC 插件在實際項目中的運用

利用 VSC 插件,我們可以為項目定製一些效率工具, 比如:

這個是我寫的快捷下載翻譯資源的插件。

隔壁項目的, 快捷生成翻譯key的插件:

社區裡一些有趣的 VSC 插件

還有很多,就不一一列出來了。

VS Code 與 Git 集成Git 集成功能介紹

Visual Studio Code 自帶對 Git 的支持。

需要已經安裝好 2.0.0(及以上)版本的 Git。

主要功能如下:

Git狀態欄(位於左下角)會顯示當前所在分支,編輯指示符以及未提交或者未拉取的提交的數量

點擊克隆存儲庫,在彈出框輸入Git遠程庫地址:

提交修改並推送到遠程倉庫(更多支持的Git命令見下圖):

Git 提交歷史記錄

在使用git的時候,經常需要查看修改記錄,或者需要查看誰提交了什麼文件等,當然可以到存放git代碼的目錄查看,但這樣很不方便,如果使用vscode編輯工具寫的話,可以安裝一個 git history 的工具包,如圖:

然後重啟 vscode,選擇任何一個文件或者文件夾,右鍵就可以看到git:history 標籤了。

點擊彈出Git History頁面,如下圖:

VS Code 遠程開發支持的功能

VS Code 用來做遠程開發,可以支持在物理機、容器以及Windows Subsystem for Linux(WSL)上實現無縫遠程開發,可以做到:

在部署相同的作業系統上進行開發,或者使用更大或更專業的硬體使用原本在本地環境不可用的工具或運行時,或者管理它們的多個版本調試在其它位置(比如客戶網站或雲端)運行的應用程式

下面是通過SSH來連接本地虛擬機,模擬遠程開發的操作流程。

使用VS Code 遠程連接伺服器的原理如下,VS Code 會在遠程主機上運行一個Server,本地通過SSH連接到遠程伺服器。

需要安裝的插件

在VS Code 擴展頁面搜索: Remote - SSH

安裝了 Remote - SSH 擴展後,你會在最左邊看到一個新的狀態欄圖標:

遠程狀態欄圖標可以快速顯示 VS Code 在哪個上下文中運行(本地或遠程),點擊該圖標或者點擊 F1 按鍵然後輸入Remote-SSH 便會彈出 Remote-SSH 的相關命令。

選擇 Remote-SSH: Connect to Host 命令,然後按以下格式輸入遠程主機的連接信息,連接到主機:user@hostname,然後根據提示輸入登錄的密碼。

VSCode 將打開一個新窗口,然後你會看到 「VSCode 伺服器 「正在 SSH 主機上初始化的通知,一旦 VSCode 伺服器安裝在遠程主機上,它就可以運行擴展並與你的本地 VSCode 實例通信了。

通過查看狀態欄中的指示器,可以知道已連接到虛擬機了,它顯示的是虛擬機的主機名。

一旦連接到遠程的 SSH 主機,就可以與遠程機器上的文件進行交互 ,如果打開集成終端,會發現現在是在遠程的 Linux 下面了。

打開遠程目錄與埠轉發

現在可以使用 bash shell 瀏覽遠程主機上的文件系統,還可以使用 "文件">"打開文件夾" 瀏覽和打開遠程目錄上的文件夾。

此外,如果開發的是 WEB 應用,為了能夠瀏覽到遠程主機上的應用,我們可以利用另一個埠轉發的功能來實現。

VS Code 伺服器端部署Code Server 下載與運行

Coder-server項目部署在遠程伺服器上,可以實現隨時隨地打開瀏覽器寫代碼,操作步驟如下:

下載code-server二進位版本 wget https://github.com/cdr/code-server/releases/download/v3.9.0/code-server-3.9.0-linux-amd64.tar.gz解壓 tar -xvzf code-server-3.9.0-linux-amd64.tar.gz重命名 mv code-server-3.9.0-linux-amd64.tar.gz code-server

運行:

export PASSWORD="password" && ./bin/code-server --port 8080 --host 0.0.0.0

說明:

--host 0.0.0.0 默認是127.0.0.1,只能本地訪問,得改成0.0.0.0以外網訪問

訪問後效果如下(基本和本地的VS Code界面一樣,只是擴展不能在線安裝):

code-server的優點:高便攜性:無論你在哪裡,只要手邊有電腦,能聯網,就可以進行代碼的調試。高安全性:可能有些時候你用的並不是你的電腦,但是你又不得不去完成一些分配的任務,你可以把代碼從git倉庫拉取到當前電腦完成,但是可能會留下一些你不想要留下的記錄,雲編碼則是能保證你不留下痕跡。方便調試:因為是在伺服器環境上運行代碼,所以如果這臺伺服器正好是你使用的伺服器的話,則你所見即所得,無需解決在後續代碼部署上的環境兼容問題。高統一性:有些時候你可能需要多個團隊開發同一區域的編碼,但是可能你的隊友們環境完全不一樣甚至會因為環境配置拖慢工程,這個時候創建多個帳戶分發給你的隊友們在伺服器上進行雲編程,那麼可以完美解決這個問題。code-server 的缺點:對雲伺服器有非常高的要求:這不僅僅是對內存和cpu的要求,對網絡帶寬也有很大的需求。而且運行代碼的加載時間相比本地vscode也是有一定的延時。沒有網絡就不能寫代碼:因為是基於瀏覽器和伺服器之間的交互,沒有網絡就打不開網頁。無法編寫太大工程:vscode本身就是一個輕量級ide,如果你要進行一個特別大的網站開發的話,肯定是要用其他ide的,原生支持的開發插件更全面。無法調試圖形化頁面:也不是完全不能調試,可以通過瀏覽器進行訪問,但是這需要你的伺服器進行更大的帶寬,而且代價是更高的延時,可能你只是要寫一個html頁面,但是每寫幾行就想預覽效果,而code-server需要你等半天將頁面從伺服器發送過來,這肯定是不能和本地訪問相媲美的。VS Code 開發實踐前端實用插件推薦

...

總結

VS Code 是我們離不開的工具,它還有很多值得我們探索的地方, 期待你去發現。

好了,本篇內容就這麼多, 希望對你有所幫助。

才疏學淺, 如有錯誤, 還請指正, 謝謝。

參考資料https://www.electronjs.org/docs/tutorial/application-architecture#electron-應用架構https://zhuanlan.zhihu.com/p/99587182http://imzc.me/dev/2016/08/15/vscode-the-architecture/http://imzc.me/dev/2016/08/16/vscode-the-extensions/https://codeteenager.github.io/vscode-analysis/learn/https://segmentfault.com/a/1190000020833042

相關焦點

  • VS Code安裝及使用基礎教程
    Visual Studio CodeVS Code 使用手冊:https://code.visualstudio.com/docs界面布局安裝完成後,我們看到的Visual Studio Code界面如下,當然不同的系統界面邊框略有不同,基本布局如圖
  • code-server 使用指南:如何在瀏覽器上使用 VS Code
    項目介紹   code-server[1] 是一款在線的 VS Code,只需將其部署到伺服器上,就可以在瀏覽器上使用 VS Code。本文將介紹 code-server 安裝和使用方法,版本為 v3.10.2。2.
  • 我最終還是選擇了VS code!
    一直以來,我認為vs code名不副實,它只不過是一個並沒有什麼特色之處,依靠插件而使其豐富起來的編輯器而已。因此,雖然我會安裝vs code,但是使用頻率缺少的可憐。直到今年5月份微軟在PyCon 2019 大會上發布了 VS Code Remote之後,我才發現它對我太具有誘惑力了。
  • VS Code Java 開發指南!
    本文是一份提供給 Java 開發人員在 2019 年使用 Visual Studio Code 的終極指南,幫助開發者使用 VS
  • 我最終還是選擇了 VS Code!
    這時候,我覺得也許我可以在探索遠程開發的道路上停下腳步了,但是,這時候我卻遇到了vs code。最近兩年vs code在開發工具領域表現得非常搶眼,讓很多原本熱衷於eclipse、IntelliJ、Atom的同學紛紛轉向了vs code,並且對其讚不絕口。
  • 《計算機科學基礎 I》微課002——vs code運行C++
    微課視頻主要發布在B站,中國大學慕課和微信公眾號同步更新內容(因為SPOC課程只能對校內學生開放)本節內容vs code是微軟公司推出的一款富文本編輯器,2015年一經推出之後迅速風靡了整個網際網路的開發圈。今天我們介紹如何在vs code當中運行C++。
  • 神器 VS Code,超詳細 Python 配置使用指南
    神器 VS Code,超詳細 Python 配置使用指南大家好,我是 Lemon。今天來跟大家分享下在 VS Code 下配置和使用 Python,作為對 PyCharm 的替代選擇之一。01 軟體準備既然是在 VS Code 中進行 Python 環境配置,在配置之前需要安裝好 Python 和 VS Code。
  • 按我說的來,讓 VS Code 好用 10 倍 | VS Code 新手指南
    我們花了一周的時間,為你整理了可能是最全的 VS Code 新手指南,分為快捷鍵速查表、10個超好用插件、新手使用教程三部分,讓小白也能快速上手、效率加倍。先上兩張我們整理的 VS Code 常用快捷鍵的速查表:快捷鍵熟了,才能發現 VS Code 有多方便。真正的大神寫起代碼來那是手不離鍵盤。
  • 在瀏覽器中使用vscode(code server)
    接下來就說一下code server如何安裝使用。cert: false•注意:如果你選擇在公網上搭建code server,請儘量不要使用默認的埠,或者將訪問密碼設置的複雜一些,因為一旦有其他人進入到了你的vs code網頁端,就可以直接通過vs code上的終端訪問你伺服器上的文件,這是一件極為危險的事。
  • 學與教|Vs code的keil環境搭建
    本期內容:學與教系列之單片機開發軟體vs code配置,替代keil
  • 厭倦了 VS Code?試試 Lite-XL吧
    原文:https://betterprogramming.pub/bored-of-vs-code-try-lite-xl-76d4cb3f8dda我是Visual Studio Code的鐵桿粉絲,已經三年了。
  • 把VS Code打造成Java開發IDE,也挺爽!
    設為「星標」,重磅乾貨,第一時間送達近期,公司推行正版化,本人使用的是JetBrains教育版,是不允許進行商業開發的,因此開啟了艱難的備用IDE選型之路。YesError codeCommand failed: code --list-extensions/bin/sh: code: command not found這是因為我的VS Code並不是通過命令行安裝的,如果要使用code
  • VS Code 中文社區 Workshop 基礎篇 —— First Step to VS Code
    使用 Electron 還意味著,有大量的 Monaco Editor 代碼可以復用。VS Code 發布VS Code 的發展可謂非常迅猛。VS Code 學習資料老師推薦了學習資料:VS Code 官網是一個很好的選擇 https://code.visualstudio.com/;知乎玩轉 VS Code 專欄 https://zhuanlan.zhihu.com/vs-code;VS Code 插件開發樣例- GitHub 上的代碼倉庫 microsoft/vscode-extension-samples
  • 分享幾個我日常使用的VS Code插件
    在這篇文章中,我想介紹一下自己日常使用中最喜歡的 Visual Studio Code 擴展。大多數時候,我用 VS Code 編寫的是 JavaScript 應用程式(標準 JavaScript、React、Angular、NodeJS……各式各樣)。這個擴展很不錯,可以幫助我搞清楚 JavaScript 中複雜的嵌套 promise。
  • 2021年的十大VS Code擴展,助您成為一個更好的開發者
    Visual Studio Code是開發人員社區中使用最廣泛的代碼編輯器之一。VS Code受歡迎的原因之一是它有大量的擴展,從而加快了開發過程。在本指南中,我們將探討2021年每個Web開發人員應該知道的10個VS Code擴展。這些工具旨在改善開發人員的體驗,並通過各種方式簡化您的工作。
  • 如何編寫 VS Code 擴展 | Linux 中國
    ◈ 使用哪個包管理器? 你可以選擇 yarn 或 npm;我使用 npm。按回車鍵後,就會開始安裝所需的依賴項。最後顯示:"Your extension initdockerapp has been created!"幹的漂亮!檢查項目的結構檢查你生成的東西和項目結構。
  • VS Code 中的 Vim 操作 | 無需修改 VSC 默認快捷鍵 | 常用組合與邏輯
    這裡需要注意,強烈推薦 不使用Vim自帶的組合快捷鍵 Ctrl ,因為其會覆蓋掉 VS Code 本身的快捷鍵以及其他插件的快捷鍵 。VS Code 中一些 Ctrl 與滾動vim 中的 []如上,使用 Shift + [] 是以「代碼塊」為單位跳行。
  • VS Code 必知必會的 20 個快捷鍵!
    註:可以在編碼的任何時候使用它,但是我更喜歡在我的代碼寫完的時候格式化一下。這個快捷鍵可以幫你去掉前面和後面多餘的空格,這樣子就可以不用使用嚴格的 Lint 檢查了。如果你使用的是新版本的 VS Code, 你可以在用戶設置頁面設置,如下圖:有些時候,代碼文件非常大,但是你只是想知道代碼的大體邏輯。這個時候代碼摺疊就非常必要。
  • 你只使用到了 VS Code 20% 的功能?讓 VS Code 首著作者帶你玩轉 VS Code!
    你真的會使用 VS Code,把 VS Code 的強大功能發揮出來了嗎?根據帕累託法則,你很可能只使用到了 VS Code 20% 的功能。工欲善其事,必先利其器。只有掌握好了你的工具( VS Code ),才能大大提高你的開發效率。於是,"玩轉 VS Code"微信公眾號於 2019 年年初應運而生。
  • 8個你會愛上的 VS Code 擴展
    itemName=adpyke.codesnapGithub Markdown Preview這個插件使用 GitHub markdown 風格覆蓋了 Visual Studio Code 中默認的  markdown 風格。