VS Code 透過兩個內建指令來移除空白:Trim Trailing Whitespace 會去除每一行尾端的空格與 Tab,而 Delete Horizontal Whitespace(在 Windows 與 Linux 上為 Ctrl+J,在 macOS 上為 Cmd+J)則會將目前行中任何連續的空格、Tab 及其他水平空白合併成單一空格。兩個指令都位於 Command Palette(命令選擇區,Ctrl+Shift+P)中,可透過快捷鍵、選單或設定檔來觸發。對於需要可預測、可重複執行的轉換,且希望在實際套用變更之前能清楚看見文字會發生什麼變化的情況,以瀏覽器為基礎、具備明確模式的工具通常是更可控的選擇。Whitespace Remover 工具完全在您目前的分頁中執行,提供三種刻意設計的不同模式讓您選擇,並以 JavaScript UTF-16 程式碼單元(code unit)回報精確的輸出長度,讓您在複製前能驗證變更結果。本指南將帶您逐步了解 VS Code 內建路線與瀏覽器工具兩種方式,並以務實的觀點檢視何者更為合適。

how to remove whitespace in vs code
how to remove whitespace in vs code

使用 VS Code 內建指令移除空白

VS Code 透過 Command Palette(命令選擇區)與使用者設定來提供空白清理功能。這些指令同時記錄在 editor 與 files 命名空間下,每一個指令針對問題的不同部分。行尾空白是最常見的問題來源,因為它會膨脹 diff 並觸發 linter 警告,而一行內部的水平空白連續段通常只是從瀏覽器、聊天軟體或格式不良的電子郵件複製貼上所留下的痕跡。

  1. 在 Windows 或 Linux 上使用 Ctrl+Shift+P,在 macOS 上使用 Cmd+Shift+P,開啟 Command Palette。
  2. 輸入「Trim Trailing Whitespace」並按下 Enter,即可從作用中編輯器內每一行的尾端去除空格與 Tab。
  3. 輸入「Delete Horizontal Whitespace」並按下 Enter(或使用預設的 Ctrl+J / Cmd+J 快捷鍵),即可將目前行中任何連續的水平空白合併成單一空格。
  4. 若要在儲存時自動執行 Trim Trailing Whitespace,請開啟 settings.json 並加入 "files.trimTrailingWhitespace": true。
  5. 若希望在保留空白的同時讓編輯器視覺上保持整潔,請設定 "editor.trimAutoWhitespace": true,這樣在選取並輸入文字時,連續的空格將會被替換為單一空格。

這些指令只會在當前作用中的檔案上運作。並沒有單一個內建指令可以一鍵移除整個檔案中的所有空白字元,也沒有內建指令可以在不安裝擴充功能的情況下刪除空白行。針對這些操作,具有明確模式的外部工具通常是更安全的選擇,因為它讓您能在將結果貼回原始檔案之前先行預覽結果。

何時瀏覽器工具是正確的選擇

內建指令速度很快,且完全不需離開您的編輯器,但它們確實存在實際的限制。它們不會計算移除了多少內容、不會在獨立的緩衝區預覽輸出,也沒有提供在「合併水平空白」與「移除所有空白字元」之間選擇的能力——這兩者是截然不同的操作,可能產生極為不同的結果。如果您正在為內容管理系統清理散文、將從試算表複製的清單標準化,或是為腳本準備精簡的 token 輸入,這其中的差異至關重要。

當您想在不開啟專案的情況下,於作用中專案之外清理文字時,瀏覽器工具同樣非常實用。貼上文字、選擇符合您下游格式的模式、執行轉換、檢查輸出、然後複製。Whitespace Remover 正是為此而設計。它完全在本機目前的分頁中執行,因此不會將任何文字傳送至伺服器,並會顯示清理後輸出的精確長度,讓您能在使用前確認變更結果。

如何使用 Whitespace Remover 移除空白

此工具提供三種明確的模式,以及穩定的三步驟工作流程。請選擇符合您下游格式的模式,再執行轉換。

  1. 將您想要清理的純文字貼上或輸入到輸入區域中。
  2. 選擇符合您目標的模式:針對散文合併水平空白、針對清單與日誌修剪各行並移除空白行,或針對精簡的 token 移除所有空白字元。
  3. 點選 Clean text,檢視輸出與所回報的程式碼單元數量,然後複製結果。

變更輸入或模式將會清除先前的輸出,因此您所複製的結果必定是由目前設定所產生。若瀏覽器封鎖剪貼簿存取,頁面會將完整且唯讀的結果保留在畫面上,讓您手動選取——複製只是一項便利功能,而非對剪貼簿 API 的隱藏依賴。

Whitespace Remover 三種模式比較

每一種模式都是經過深思熟慮的取捨。下表摘要說明每一種模式會改變什麼、又會保留什麼,讓您在執行前能選擇最符合下游格式的模式。

模式 移除內容 保留內容 最適合 注意事項
合併水平空白 每一行中連續的空格、Tab 及其他水平空白;緊鄰換行的空格;CRLF 行尾(標準化為 LF) 段落之間的換行與空白行 散文、文章、README 內容、段落文字 並非字間距標準化工具;段落內部的間距將被縮減為單一空格
修剪各行並移除空白行 每一行的開頭與結尾空白;修剪後變為空白的行 非空行內部的間距;保留行之間以一個 LF 換行分隔 清單、複製的表格、日誌、貼上的筆記、CSV 類資料 不會合併一行內部連續的空格;刻意縮排將會被移除
移除所有空白字元 JavaScript 中 Unicode 感知的空白類別所匹配的所有字元,包括空格、Tab、換行及不換行空格 無——所有空白皆會被移除 精簡的 token 輸入、壓縮的機器可讀資料、串接識別碼 詞彙與記錄可能會彼此相連;適用於 token 而非散文

計數的意義及其侷限

結果面板會回報兩個數字:移除了多少程式碼單元,以及最終輸出的長度。這兩個數字都是針對精確的輸入與輸出字串,以 JavaScript UTF-16 程式碼單元計算所得。對於精確的輸入而言,程式碼單元計數是確定性的,但它並不等同於字素計數、可見字元計數、位元組計數或字數計數。Emoji 與部分歷史文字可能會使用超過一個 UTF-16 程式碼單元,因此含有國旗 emoji 的字串,其程式碼單元計數可能會高於肉眼直觀的預期。

若要進行快速的健全性檢查,請使用輸入「Hello World\n\nFoo Bar」(22 個程式碼單元)。經過合併水平空白後,結果為「Hello World\n\nFoo Bar」(20 個程式碼單元)。計算過程很直接:輸入 22 個程式碼單元,輸出 20 個程式碼單元,因此移除了 2 個程式碼單元。此工具具有確定性,因此相同的輸入與相同的模式必定產生相同的字串。

程式碼與結構化資料的限制與注意事項

空白本身可能就是資料。在 Python、YAML 與 Makefile 中,縮排是語法的一部分。在 Markdown 中,一行尾端的兩個空格代表強制換行。在 CSV 中,置於引號欄位內的 Tab 是值的一部分,而非裝飾。Whitespace Remover 不會剖析上述任何一種格式,因此當轉換破壞了結構時,它並不會提出警告。針對原始程式碼、法律文字、詩歌、固定寬度資料、YAML、Python,或任何縮排與行尾承載語意意義的語法,請在複製前先於結果面板預覽輸出,或使用具備格式感知能力的編輯器。

當真正的問題只在於換行本身時,專門的line-break remover 是更聚焦的選擇:它在不更動其他空格的情況下將行尾標準化,因此會保留具意義的縮排。Whitespace Remover 不會執行自動拼字校正、標點符號處理、Unicode 正規化、HTML 剖析、Markdown 剖析、智能引號轉換、去除重複或大小寫轉換,也不會保留來自剪貼簿的富文字樣式,因為輸入僅為純文字。若您從文書處理器貼上有樣式的文字,只有文字內容會被處理。

若您正在權衡選項,為 VS Code 中每一行加上引數的正確做法對此有詳細說明。

若您正在權衡選項,如何在不遺失間距的情況下移除 Excel 中的換行對此有詳細說明。