若要在 VS Code 中為每一行加上引號,請將清單貼到一個懂得各格式跳脫規則的加引號工具中,點選你要的 JSON 陣列、SQL IN 子句或 CSV 資料列預設值,然後直接把結果複製到編輯器。一份單純的 ID、名稱或值清單,每行一個項目,還不算是程式碼:它只是內容。VS Code 會為它上色,但不會解析、驗證它,更不會對它執行查詢。一段從聊天訊息複製而來的清單,與一段能夠通過編譯的 JSON 陣列字面值、查詢主控台可接受的 SQL IN 子句、或 Excel 能乾淨匯入的 CSV 資料列之間的差距,正是這三種格式各持己見的引號與跳脫規則。「為每一行加上引號」這個工具正是為了以一鍵之差跨越那道鴻溝而打造,規則鎖定在各格式所引用的標準上,而且整個流程都在你的瀏覽器中執行,清單從不離開你的電腦。

add quotes to each line vs code
add quotes to each line vs code

為什麼 VS Code 使用者會撞上同一個引號問題

大多數在開發者一天工作中出現的清單,都是以純文字形式抵達的:客服單裡的五十個使用者 ID、從試算表複製的一欄國碼、同事聊天訊息裡的二十個產品 SKU。在 VS Code 裡,它們被放在暫存緩衝區中以原始文字呈現,看得到也搜尋得到,但無法當作程式碼使用。要把它們轉成 JSON 陣列字面值,清單中每個值都需要雙引號包裹,且除了最後一行之外,每一行結尾都要加上逗號;要把它們轉成 SQL IN 子句,每個值要用單引號包裹,且值內部的單引號必須雙寫;要把它們轉成 CSV 資料列,每個值要用雙引號包裹,且內部的雙引號也要雙寫。

人總是忍不住想直接用 VS Code 內建的多游標編輯或直欄選取,再手動輸入引號。處理十行還行,處理一百行就崩潰,而且幾乎一定會搞錯內嵌引號的情況。內容裡含有 O'Brien 的清單看起來無害,直到 SQL 把它打回票;含有 say "hi" 的清單看起來無害,直到 JSON 丟出語法錯誤;含有 6" ruler 的清單看起來無害,直到 CSV 匯入工具誤讀了那一列。問題很少出在引號本身;真正的錯誤,是把三種不同的跳脫規則當成同一種。

這個工具在 VS Code 工作流程中做了什麼

為每一行加上引號工具接收一份清單,每行一個項目,並把它轉成可直接貼上的程式碼,輸出成你真正需要的格式。點選 JSON 預設,每一行都會以雙引號包裹,內嵌引號依照 RFC 8259 以反斜線跳脫;點選 SQL 預設,每一行都會以單引號包裹,內嵌單引號依照 PostgreSQL 文件中的 ISO 字串常值規則雙寫;點選 CSV 預設,每一行都會以雙引號包裹,內嵌雙引號依照 RFC 4180 雙寫,且整列輸出為單一行。還有一個反引號預設,涵蓋 JavaScript 樣板字面值,會同時跳脫反引號與內插開頭,避免貼上的內容注入運算式。

由於這個工具是在瀏覽器中執行,而非作為 VS Code 擴充套件,因此不需要安裝任何東西,也沒有市集風險。你那份通常正是你不會想貼到第三方服務的內部使用者 ID 或客戶姓名的清單,會在本地端處理,從不上傳。輸出是一段單一文字區塊,你可以複製到剪貼簿,再貼到 VS Code 開啟的編輯器中游標所在位置,後續的驗證就交給編輯器的語言服務接手。

如何在三步驟內為 VS Code 包裝好一份清單

  1. 把你的清單貼到輸入區,每行一個項目。空白行與前後空白可以保留;如果你希望處理掉,工具提供逐行修剪與略過空白行的開關。
  2. 點選符合你即將貼入之檔案的預設:JSON 陣列適用於 .json 檔或 JavaScript 字面值;SQL IN 子句適用於 .sql 檔或查詢主控台;CSV 資料列適用於試算表匯入或單行 CSV;單純引號則適用於純粹裝飾用途。
  3. 若預設值不符所需,可微調引號樣式、分隔符號或跳脫設定,再複製結果。將游標移至 VS Code 中貼上,編輯器會將結果視為所選格式的有效語法接收。

各別的控制項涵蓋了預設值所編碼的情境:引號樣式(含)、分隔符號(最後一行可選擇是否加上尾端分隔符號,預設關閉,以免 JSON 陣列結尾出現多餘的逗號)、跳脫開關、略過空白行、以及逐行修剪。結果會回報處理了多少行,讓你在貼進編輯器前能察覺是否有貼上時掉了換行的情況。

決定它能不能通過編譯的跳脫規則

JSON、SQL 與 CSV 對於如何在字串中撰寫引號並無共識。JSON 對雙引號進行反斜線跳脫,因此內容為 say "hi" 的一行會變成字串字面值 "say \"hi\""。SQL 在 PostgreSQL 文件與 SQLite 所記載的 ISO 規則中,將單引號雙寫,因此內容為 it's 的一行會變成 'it''s',而非 'it\'s'。CSV 在 RFC 4180中,則將雙引號雙寫,並把每個欄位都用雙引號包起來,因此內容為 6" ruler 的一行會變成 "6"" ruler"。

這三條規則彼此不同,而預設所編碼的正是這些差異。把單引號雙寫的規則套用於 JSON 檔,會產生剖析器無法讀取的字串;把反斜線跳脫的規則套用於 SQL 主控台,會產生 PostgreSQL 無法執行的字串。工具的預設值各自鎖定在其所引用的標準上,因此同一份輸入在不同的預設下會產生各自正確的跳脫結果。對工具自身的輸出再執行一次,會再包一層引號,因為工具無從得知輸入中的引號究竟是內容還是包裝;若需要以不同設定重新包裝,請從原始清單開始。

JSON、SQL 與 CSV 一覽

格式包裹字元內嵌引號規則連接字元外層包裝
JSON 陣列"(雙引號)反斜線跳脫 (RFC 8259),(逗號)[ ]
SQL IN 子句'(單引號)引號雙寫 (ISO/PostgreSQL),(逗號)( )
CSV 資料列"(雙引號)引號雙寫 (RFC 4180),(逗號)無,單行
純引號使用者自選預設無使用者自選

同一份輸入,即包含 Alice、Bob O'Brien 與 say "hi" 的清單,在各預設下會產生各自正確的不同輸出。正是這樣的差異,說明了為何單一格式的「前綴加後綴」工具不適合用於程式碼的引號處理;真正的重點在於規則。

與其他清單前置工具搭配使用

清單很少一開始就處於可以直接加引號的狀態。從試算表貼來的一欄,往往夾帶重複、尾端空白或散落的空白列,否則會在陣列中產生空字串。先清理清單,再為它加引號,才是能同時避免「一份 200 行的 IN 子句裡藏了五個重複項」與「JSON 陣列裡出現空字串」的工作流程。加完引號之後,把結果貼到 VS Code,讓編輯器內建的語言服務(JSON 驗證、SQL 語法高亮、差異檢視器)在你提交或執行前先確認結果能正確剖析。

若需要不同形狀的輸出,網站的移除重複行工具會保留每行的第一次出現,且原封不動地保留留下的文字;當同事貼來的內容含有你不想擴散到陣列中的重複項時,這正是加引號之前該執行的步驟。

值得了解的限制與邊界情況

輸入上限為一百萬個字元,並以單一線性掃描處理,因此即使是極長的清單也能瞬間回傳。當略過空白行的開關開啟時,空白行會被略過,避免空白列在陣列中變成空字串。輸入中已存在的引號會被視為內容而非包裝;一份已經以引號開頭與結尾的清單會被再包一層引號,這是文件記載的行為,原因正如引號工具無法分辨哪些是資料、哪些是裝飾。若輸入是先前一次的輸出,而目標是改用不同的包裝方式,請從原始清單開始,而非再次執行。

這個工具產生的是字串字面值,而非 SQL 關鍵字、結構描述名稱或資料表識別字,也就是要放進 WHERE id IN (...) 括號中的那類值。

如果你正在權衡選項,為文字加上行號:基於瀏覽器的替代方案對此有詳細說明。

如果你正在權衡選項,無需正則或跳脫,為每一行加上前綴對此有詳細說明。