在vim中為大量單字加上引號

在vim中為大量單字加上引號

因此,我使用文字語法創建了大量的 javascript 對象,並且忘記對許多鍵值對的鍵使用引號。我該如何設計一個正規表示式來「在vim中向任何非單引號字串添加單引號,後面跟著冒號」?

我嘗試了正規表示式發現這裡但它在鍵後面附加了一組空引號。

答案1

我假設你的每個鍵:值對都在自己的行上,如下所示:

var myObject = {
key1:val1,
key2:val2,
};

:%s/\(.*\):/'\1':/然後以下 2 個正規表示式/替換即可完成您的需求: %s/''/'/

第一個將冒號(即部分\(.*\):)之前的所有文字替換為相同的文字(但用引號括起來),並再次替換冒號(即部分'\1':)。這不考慮任何已被引用的鍵,因此第二個命令只是將任何一組 2 個單引號替換為 1 個單引號。

如果單行上有多個鍵:值對,第一個指令將無法運作。在這種情況下,您可以嘗試:%s/, \(.*\):/, '\1':/在兩個表達式的開頭新增逗號和空格之類的方法。您仍然需要清理每個物件中的第一個條目,因為這些條目前面沒有逗號。

無論您使用什麼命令,我建議以 結尾/c,如下所示,以便:%s/\(.*\):/'\1':/c您可以確認每個替換,至少確保它按照您想要的方式工作。

祝你好運!

答案2

:%s/^.\{-}:\s*\zs[^',]\+/'&'

似乎可以解決這個問題:

  • ^.\{-}:\s*匹配值之前的所有內容:

     ^             | .\{-}:              | \s*
    ---------------+---------------------+--------------------
     start of line | any character,      | as much whitespace
                   | as few as possible, | as possible
                   | until the 1st colon |
    
  • \zs[^',]\+\是我們真正的比賽。它只匹配值,基本上盡可能匹配非單引號或逗號的任何字元。

  • '&'將匹配項替換為單引號括起來的匹配項本身。

相關內容