建可長期維護(hù)的寫作工作流)
說實(shí)話我這兩年對 Markdown 編輯器的態(tài)度變過好幾次。最早覺得“能渲染就行”后來被所見即所得的工具慣壞了再后來回到 VS Code 里寫文檔才慢慢意識到一個判斷VS Code 里的 Markdown 編輯功能真正的價值不在于某個新特性有多驚艷而在于它把“寫 Markdown”這件事從單次記錄變成了一條可以長期維護(hù)的工作流。這個判斷不是憑空來的。以前很多人問“用什么軟件寫 Markdown 比較好”答案通常圍繞兩個方向一個是輕量好看、打開就能寫的專用編輯器另一個就是 VS Code理由往往是“反正裝了 VS Code順便用它寫文檔”。但近幾年你再去看 VS Code 的 Markdown 體驗(yàn)會發(fā)現(xiàn)它已經(jīng)不只是順帶支持而是把編輯、預(yù)覽、圖片路徑、文檔大綱、導(dǎo)出發(fā)布這些環(huán)節(jié)都串起來了。對一個需要維護(hù)技術(shù)文檔、博客草稿、項(xiàng)目 README 的人來說這套能力比“好看”重要得多。下面我就從一個普通使用者的角度聊聊 VS Code 里新的 Markdown 編輯功能到底在解決什么問題以及怎么把它用得比大多數(shù)插件組合更順手。1. 先搞清楚一件事VS Code 的 Markdown 更新到底在解決什么問題1.1 表面是編輯體驗(yàn)實(shí)質(zhì)是寫作工作流如果你只看界面會覺得 VS Code 的 Markdown 功能沒什么特別左邊寫右邊預(yù)覽語法高亮目錄大綱。但如果你真正把它放進(jìn)一個長期項(xiàng)目里會發(fā)現(xiàn)很多細(xì)節(jié)正在被重新設(shè)計。一個很典型的例子是圖片處理。過去寫 Markdown 最煩的事情之一就是截圖之后要手動保存到某個目錄再手動修改圖片鏈接。一旦圖片多了路徑就會亂換個環(huán)境打開文檔圖片全部失效?,F(xiàn)在 VS Code 在較新版本里把“粘貼圖片”這個動作做了優(yōu)化你可以把截圖直接粘貼到文檔里編輯器會自動幫你把圖片保存到指定目錄并在當(dāng)前 Markdown 文件里生成相對路徑。表面看這只是省了一步操作實(shí)際上解決的是“文檔和資源如何保持一致”的問題。類似的還有路徑補(bǔ)全。你寫[說明文字](的時候VS Code 會自動提示當(dāng)前工作區(qū)里的文件路徑不用再憑記憶敲目錄。對寫復(fù)雜項(xiàng)目文檔的人來說這個功能會明顯降低出錯率。這些功能單獨(dú)拆開看都不算大更新但合在一起它們把 Markdown 從“純文本格式”推向了“可維護(hù)的內(nèi)容工程”。所以我更愿意把 VS Code 的 Markdown 更新理解為一次工作流補(bǔ)齊而不是某個單一功能的升級。1.2 和傳統(tǒng) Markdown 編輯器相比差異不在“好看”你可能用過其他 Markdown 工具比如專門做寫作的、帶云同步的、或者顏值很高的靜默編輯器。它們在“打開即寫”和“即時渲染”上的體驗(yàn)確實(shí)更輕松。但 VS Code 的路線不太一樣它的核心優(yōu)勢是三個文件即源碼。Markdown 文件就是普通文本可以放進(jìn) Git、可以 diff、可以 review、可以參與自動化構(gòu)建。配置可版本化。你使用的快捷鍵、片段、設(shè)置項(xiàng)都可以跟隨項(xiàng)目保存換一臺機(jī)器也能復(fù)現(xiàn)同樣的寫作環(huán)境。擴(kuò)展生態(tài)強(qiáng)。從語法檢查到導(dǎo)出 Word、PDF再到自動發(fā)布博客你可以在同一個軟件里完成內(nèi)容生產(chǎn)和發(fā)布鏈路。這意味著什么意味著如果只是隨手寫一篇日記、臨時記錄一個靈感VS Code 不一定比那些極簡工具更舒服。但如果要把一批文檔長期維護(hù)下去并且還要跟代碼、腳本、發(fā)布流程放在一起VS Code 會更可控。這也是我對它的核心判斷不要用“誰更好看”來評價 VS Code 的 Markdown 功能而要用“誰更適合長期維護(hù)”來衡量。2. 內(nèi)置能力已經(jīng)夠用先把這些功能摸熟在聊插件之前我非常建議你先花時間把 VS Code 自帶的能力理一遍。很多人的感受是“VS Code 默認(rèn)很簡陋”其實(shí)是因?yàn)橹挥昧司庉嬈骷宇A(yù)覽沒有把內(nèi)置功能組合起來。2.1 編輯側(cè)的核心能力打開一個.md文件后VS Code 默認(rèn)會啟用 Markdown 語言支持。你會得到幾類基礎(chǔ)能力語法高亮標(biāo)題、加粗、斜體、行內(nèi)代碼、代碼塊、鏈接、列表會顯示不同樣式。標(biāo)題折疊鼠標(biāo)移到標(biāo)題左側(cè)的折疊箭頭可以收起整個章節(jié)長文檔閱讀更清楚。任務(wù)列表- [ ]和- [x]會被識別成可勾選的任務(wù)項(xiàng)適合寫待辦式文檔。路徑補(bǔ)全在鏈接或圖片語法中寫路徑時會有文件列表提示。自動保存配合files.autoSave設(shè)置可以避免頻繁手動保存。這些功能不需要插件。如果你不知道自己所在版本的 VS Code 支持哪些 Markdown 命令可以直接打開命令面板搜索“markdown”你會看到一列相關(guān)命令。不同版本之間命令名會有差異這個動作能幫你快速確認(rèn)當(dāng)前環(huán)境的能力。2.2 預(yù)覽側(cè)的配合方式VS Code 提供兩種預(yù)覽方式CtrlShiftV在當(dāng)前頁打開預(yù)覽。CtrlK V在右側(cè)打開預(yù)覽邊寫邊看。很多人用預(yù)覽只是“偶爾看一眼”但如果你準(zhǔn)備長期寫我建議把預(yù)覽和編輯器的聯(lián)動關(guān)系確認(rèn)好。VS Code 默認(rèn)支持編輯器與預(yù)覽之間的滾動同步。你可以在設(shè)置中搜索markdown.preview.scrollPreviewWithEditor和markdown.preview.scrollEditorWithPreview這兩個配置決定誰跟隨誰。一個比較舒服的配置是編輯器滾動預(yù)覽跟著滾動當(dāng)你在預(yù)覽里點(diǎn)擊定位時編輯器也跳到對應(yīng)位置。這樣可以保持“寫”和“看”始終在同一個上下文里。需要注意的是內(nèi)置預(yù)覽只是一個參考環(huán)境。同樣的 Markdown 內(nèi)容在不同發(fā)布系統(tǒng)、不同渲染器上可能有細(xì)節(jié)差異。不要完全依賴內(nèi)置預(yù)覽的視覺效果尤其不要用它來判斷“導(dǎo)出后是否一致”。2.3 一個最小可運(yùn)行的寫作流程如果你剛開始嘗試用 VS Code 寫 Markdown我建議直接按下面這個最小流程跑一遍在 VS Code 里打開一個文件夾而不是只打開單個文件。這樣圖片、附件、多個文檔之間的相對路徑才能穩(wěn)定工作。在文件夾里建一個docs目錄用來放 Markdown 文檔。再建一個docs/assets目錄用來統(tǒng)一存放圖片。新建一個.md文件用CtrlK V打開側(cè)邊預(yù)覽。寫下標(biāo)題、正文、列表、任務(wù)項(xiàng)插入一張圖片。寫完以后通過左側(cè)的“大綱”視圖檢查標(biāo)題層級是否正確。這個流程看起來簡單但它是后續(xù)所有進(jìn)階操作的基礎(chǔ)。單次跑通不代表能穩(wěn)定批量使用但至少說明從編輯到預(yù)覽的鏈路沒有斷。3. 新功能里最容易踩坑的五個細(xì)節(jié)就算功能再好實(shí)際使用中還是會遇到各種奇怪問題。下面這些是你在熱詞和搜索里最常看見的痛點(diǎn)我按常見程度梳理一下。3.1 換行為什么看著明明換行了導(dǎo)出卻連在一起這是 Markdown 新手最容易困惑的問題。你在 VS Code 里按下回車文本看起來換了一行但導(dǎo)出或發(fā)布后兩行文字卻連在了一起。原因是 Markdown 的換行規(guī)則和普通文本編輯器不一樣。一個單獨(dú)的換行符在大多數(shù) Markdown 渲染器里會被當(dāng)成空格所以需要空一行才能形成新的段落如果你想強(qiáng)制換行但不分段通常需要在行尾加兩個空格或者使用br標(biāo)簽。排查這個問題時先做兩步打開右側(cè)預(yù)覽看換行效果是否和你預(yù)期一致。用一個目標(biāo)渲染器比如你要發(fā)布到的博客平臺或轉(zhuǎn)換工具再看最終效果。如果你發(fā)現(xiàn)預(yù)覽里是正常的但發(fā)布后不正常問題通常出在渲染器的 Markdown 解析規(guī)則不同而不是 VS Code 的問題。3.2 圖片粘貼、路徑、目錄策略新版 VS Code 支持粘貼圖片這是一個很好用的能力但默認(rèn)行為不一定適合所有人。如果你把圖片直接粘貼到文檔里圖片可能被保存在文檔所在目錄時間一長文檔目錄會越來越亂。更穩(wěn)的做法是通過設(shè)置來控制圖片的保存位置。在較新版本的 VS Code 里你可以搜索markdown.copyFiles.destination把圖片目標(biāo)路徑配置到一個統(tǒng)一的assets目錄中。這樣每粘貼一張圖編輯器會自動幫你把文件放到assets并在文檔中插入相對路徑。另一個常見坑是路徑包含中文、空格或特殊字符。雖然 VS Code 自己處理相對路徑一般沒問題但你的文檔可能還會發(fā)布到其他平臺或者被其他工具轉(zhuǎn)換所以文件名和路徑盡量保持簡單。3.3 標(biāo)題沒有 # 符號的“標(biāo)題”是怎么出現(xiàn)的有用戶遇到一種情況文檔里出現(xiàn)了像標(biāo)題一樣的大字但查看原文時卻看不到#符號。這通常不是 VS Code 的 Bug而是 Markdown 里有另一種標(biāo)題語法Setext 標(biāo)題。Setext 標(biāo)題是在一行文字的下方使用或---來標(biāo)記一級標(biāo)題或二級標(biāo)題。比如這是一個一級標(biāo)題 這是一個二級標(biāo)題 ---如果你復(fù)制內(nèi)容或誤操作把某些文本下面的橫線當(dāng)成了分隔線看起來就會像“沒有 # 的標(biāo)題”。另外如果你的 Markdown 文件里連續(xù)輸入---它可能會被識別為水平分割線影響標(biāo)題層級。排查辦法很簡單把光標(biāo)放到那個文本附近看 VS Code 是否能識別成標(biāo)題打開大綱視圖確認(rèn)它的層級如果是意外產(chǎn)生的 Setext 標(biāo)題把它改成#或##寫法。3.4 表格編輯、復(fù)制、對齊都不如 Office 順手VS Code 內(nèi)置的 Markdown 表格編輯屬于“能用但不智能”。你可以手寫管道表格也可以使用 Markdown 語法創(chuàng)建但不會像 Excel 那樣自動調(diào)整列寬也不會有可視化的拖拽插入。如果你需要寫比較多、比較復(fù)雜的表格我的建議是盡量寫簡單的表格列數(shù)不要太多。保持每一行的列數(shù)一致否則 Markdown 渲染會錯位。避免在單元格里粘貼大段文字渲染效果通常不理想。如果表格復(fù)雜到 Markdown 已經(jīng)難以維護(hù)可以考慮在文檔里引入 HTML 表格。但要確認(rèn)目標(biāo)渲染器是否允許 HTML 標(biāo)簽。復(fù)制表格到其他平臺時也要降低預(yù)期。Markdown 表格復(fù)制到 Word、公眾號后臺等環(huán)境后格式丟失是常見情況這不是編輯器能完全解決的。3.5 目錄和大綱為什么打開文件看不到側(cè)邊目錄很多人希望文檔能自動生成一個目錄但 VS Code 內(nèi)置的 Markdown 預(yù)覽不會自動插入目錄。如果你想在寫文檔時快速跳轉(zhuǎn)應(yīng)該使用左側(cè)的“大綱”視圖它會根據(jù)標(biāo)題自動生成類似目錄的結(jié)構(gòu)。如果你想在最終輸出的文檔里呈現(xiàn)目錄則需要額外手段。常見做法有兩種安裝支持目錄生成的 Markdown 擴(kuò)展。在發(fā)布或?qū)С霏h(huán)節(jié)由腳本自動處理目錄。不要把“VS Code 里看不到目錄”理解成功能缺失。它只是把“編輯時的導(dǎo)航”和“成品的目錄”分開了后者通常更適合交給后處理腳本。3.6 排查鏈路從現(xiàn)象到原因的檢查順序遇到 Markdown 相關(guān)問題時我一般按下面這個順序排查現(xiàn)象優(yōu)先檢查項(xiàng)說明換行異常是否空行、是否行尾空格Markdown 段落規(guī)則圖片不顯示路徑是否是相對路徑、文件是否存在圖片狀態(tài)和鏈接狀態(tài)最容易被忽略標(biāo)題層級不對是否用了 Setext 標(biāo)題、分隔線檢查---是否被識別為分割線預(yù)覽和發(fā)布不一致目標(biāo)渲染器的解析規(guī)則不同平臺 Markdown 語法不完全一致打開文檔沒有語法高亮文件擴(kuò)展名是否為.mdVS Code 按擴(kuò)展名識別語言命令找不到VS Code 版本較舊部分新功能需要較新版本先看現(xiàn)象再看輸入再看環(huán)境再看參數(shù)最后才考慮是不是工具的缺陷。這樣能避免很多無效操作。4. 推薦一個“先內(nèi)置、后擴(kuò)展、再自動化”的配置路徑4.1 第一步不裝擴(kuò)展把內(nèi)置體驗(yàn)跑一遍我不太建議第一次使用就裝一堆擴(kuò)展。擴(kuò)展確實(shí)能增強(qiáng)體驗(yàn)但也可能引入配置沖突、快捷鍵干擾和性能負(fù)擔(dān)。你可以先用一個空項(xiàng)目只靠 VS Code 內(nèi)置能力把下面這些事做一遍新建 Markdown 文件。寫標(biāo)題、列表、代碼塊、表格、圖片鏈接。打開側(cè)邊預(yù)覽和大綱視圖。調(diào)整滾動同步配置。確認(rèn)圖片粘貼的目標(biāo)目錄。這個過程能讓你建立對“基礎(chǔ)能力”的體感。之后再決定缺什么、補(bǔ)什么而不是被擴(kuò)展市場的信息淹沒。4.2 第二步按需擴(kuò)展別一次裝十個如果你確認(rèn)內(nèi)置能力不夠用再考慮擴(kuò)展。比較常見的需求方向包括語法檢查比如 markdownlint可以幫你規(guī)范標(biāo)題層級、空行、列表格式。寫作增強(qiáng)比如自動補(bǔ)全、快捷鍵、表格格式化。預(yù)覽增強(qiáng)比如自定義 CSS、支持更多 Markdown 語法。導(dǎo)出工具比如把 Markdown 轉(zhuǎn)成 HTML、Word 或 PDF。目錄生成在文檔里插入可更新的目錄。擴(kuò)展名最好以 VS Code 擴(kuò)展市場里的實(shí)際搜索結(jié)果為準(zhǔn)。這里我給一個比較保守的建議先裝一個語法檢查類、一個寫作增強(qiáng)類跑一周。如果覺得需要再加再逐步增加。不要一上來就追求“全家桶”。4.3 第三步把 Markdown 接入你的發(fā)布或?qū)С隽鞒坍?dāng)你開始把 Markdown 作為長期內(nèi)容格式你一定會遇到“怎么把它變成別人能看的東西”的問題。比如博客系統(tǒng)里的 HTML、團(tuán)隊內(nèi)部需要 Word 文檔、個人筆記需要 PDF。通用思路是把 Markdown 作為內(nèi)容源通過腳本或自動化工具轉(zhuǎn)換成目標(biāo)格式。下面是一個常見的命令行轉(zhuǎn)換示例# 這是一個常見思路示例具體命令取決于你安裝的工具 pandoc input.md -o output.docx如果你有編程經(jīng)驗(yàn)還可以把 Markdown 文件納入 Git 倉庫在提交或發(fā)布時自動執(zhí)行檢查檢查是否有指向不存在文件的鏈接。檢查圖片是否被正確引用。檢查標(biāo)題層級是否連續(xù)。檢查任務(wù)列表是否為空殼。這套做法的價值不是“快”而是把內(nèi)容生產(chǎn)變成一條可重復(fù)、可驗(yàn)證的流程。VS Code 在這里扮演的角色是流程里的編輯環(huán)節(jié)但它為了這個環(huán)節(jié)提供了必要的接口和上下文讓你不用在多個軟件之間來回切換。5. 用 Markdown 寫技術(shù)文檔時真正要養(yǎng)成的幾個習(xí)慣工具是輔助真正決定文檔質(zhì)量的往往是你使用它時養(yǎng)成的習(xí)慣。下面這幾個習(xí)慣是 VS Code 的 Markdown 功能最能幫上忙的地方。5.1 一個文件只講一件事很多文檔讀起來費(fèi)勁原因是把背景、操作步驟、排錯、注意事項(xiàng)全塞在一個文件里。VS Code 的大綱視圖會幫你把標(biāo)題形成目錄但如果一個文件有 20 個一級標(biāo)題大綱也很難救回來。我更建議把內(nèi)容拆成多個文件用目錄組織docs/ README.md setup.md workflow.md troubleshooting.md這樣每個文件結(jié)構(gòu)更簡單大綱視圖更清晰后續(xù)也可以針對單個文件做自動化檢查。5.2 圖片統(tǒng)一進(jìn) assets 目錄就算 VS Code 幫你自動貼圖如果你不主動規(guī)范目錄時間一長還是會亂。我的建議是文檔里所有圖片都放到一個統(tǒng)一目錄。引用圖片時使用相對路徑不要使用絕對路徑。圖片文件名要有意義不要用1.png、2.png這種最終看不出內(nèi)容的命名。VS Code 的路徑補(bǔ)全和圖片粘貼配置能幫你減少手動輸入路徑的負(fù)擔(dān)但目錄結(jié)構(gòu)本身還是要靠人維護(hù)。5.3 用任務(wù)列表和標(biāo)題結(jié)構(gòu)代替“記在腦子里”寫技術(shù)方案或者操作手冊時經(jīng)常會有“這些步驟我記得很清楚不寫了”的錯覺。實(shí)際上文檔給別人看時需要非常明確的順序。VS Code 對任務(wù)列表的支持適合用來管理這種過程性內(nèi)容比如- [x] 確認(rèn)開發(fā)環(huán)境 - [ ] 安裝依賴 - [ ] 配置數(shù)據(jù)庫連接 - [ ] 運(yùn)行測試配合預(yù)覽中的復(fù)選框交互你可以邊推進(jìn)邊確認(rèn)。這就是一個很輕量的項(xiàng)目狀態(tài)文檔。5.4 什么時候要回頭補(bǔ)元信息如果文檔只是臨時記錄元信息可以不寫。但如果它要進(jìn)入倉庫長期維護(hù)我建議在文件頭部加上一些結(jié)構(gòu)化信息比如標(biāo)題、作者、創(chuàng)建日期、狀態(tài)、關(guān)聯(lián)文檔等。不要手工維護(hù)可能過期的信息盡量在需要時用腳本生成。VS Code 的代碼片段功能可以幫你快速生成這類文件頭。你可以在用戶代碼片段里配置一個 Markdown 模板每次新建文檔時輸入前綴就能自動生成基礎(chǔ)結(jié)構(gòu)。6. 適合誰、不適合誰別把 VS Code 當(dāng)成萬能寫作臺任何一個工具都有邊界。VS Code 的 Markdown 編輯功能雖然越來越強(qiáng)但它不是給所有人準(zhǔn)備的萬能寫作臺。6.1 三類用戶會非常受益第一類是寫 README、技術(shù)方案、API 文檔、內(nèi)部知識庫的開發(fā)人員。他們需要把文檔和代碼放在一起管理也需要用 Git 追蹤修改記錄VS Code 天然適合這類場景。第二類是喜歡鍵盤操作、不希望被鼠標(biāo)打斷的寫作者。VS Code 的快捷鍵、命令面板、路徑補(bǔ)全可以減少從鍵盤切換到鼠標(biāo)的頻率。第三類是需要在內(nèi)容生產(chǎn)鏈路里加入自動化的用戶。比如把 Markdown 轉(zhuǎn)成 HTML 發(fā)布或把多個 Markdown 文件合并生成 HTML 文檔VS Code 所在的開發(fā)環(huán)境能更容易地承接這些腳本。6.2 三類用戶可能用不慣第一類是追求“所見即所得”的普通用戶。他們不想關(guān)心 Markdown 語法、空行規(guī)則、路徑問題只想打開就能寫寫完直接看到最終效果。這類用戶更適合專用寫作工具。第二類是需要精確排版和分頁的用戶。雖然可以通過導(dǎo)出工具把 Markdown 轉(zhuǎn)成 Word 或 PDF但復(fù)雜排版、頁眉頁腳、固定樣式并不是 Markdown 的長項(xiàng)。第三類是重度依賴云端多人協(xié)作的用戶。VS Code 配合插件或同步盤可以實(shí)現(xiàn)多人協(xié)作但更流暢的體驗(yàn)通常來自在線文檔平臺。6.3 如果還是想用可以先做一個小驗(yàn)證我建議你給自己 30 分鐘做一個最小驗(yàn)證新建一個 Markdown 文件。按“打開文件夾、建 docs、建 assets、寫正文、粘貼一張圖、打開預(yù)覽、打開大綱”的順序操作一遍。嘗試一次轉(zhuǎn) Word 或發(fā)布到目標(biāo)平臺。如果這套流程能順利走通說明 VS Code 的 Markdown 工作流適合你如果某個環(huán)節(jié)卡住先別急著否定而是把問題定位到具體環(huán)節(jié)。大多數(shù)時候卡點(diǎn)不是工具本身而是路徑、渲染器或?qū)?Markdown 語法的誤解。從我自己的經(jīng)驗(yàn)看VS Code 里的 Markdown 編輯功能已經(jīng)足夠支撐日常技術(shù)寫作。它不是那種打開第一眼就驚艷的工具但當(dāng)你開始把文檔當(dāng)作需要長期維護(hù)的“產(chǎn)品”來對待時它的可靠性和擴(kuò)展性就會慢慢體現(xiàn)出來。新功能的真正意義是讓你可以少操心格式和路徑把更多精力放在內(nèi)容本身。