vimで多数の単語に引用符を追加する

vimで多数の単語に引用符を追加する

そこで、リテラル構文を使用して多数の JavaScript オブジェクトを作成しましたが、多数のキーと値のペアのキーに引用符を使用するのを忘れました。vim で「単一引用符で囲まれていない文字列に単一引用符を追加し、その直後にコロンを追加する」正規表現を作成するにはどうすればよいでしょうか。

見つかった正規表現を試してみましたここただし、キーの後に空の引用符が追加されます。

答え1

次のように、各キーと値のペアが独自の行にあると仮定します。

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

:%s/\(.*\):/'\1':/次に、次の2つの正規表現/置換で必要な処理を実行します。 %s/''/'/

最初のコマンドは、コロン (その\(.*\):部分) より前のすべてのテキストを、同じテキスト (ただし引用符で囲まれている) と再びコロン (その'\1':部分) に置き換えます。これは、すでに引用符で囲まれているキーを考慮しないため、2 番目のコマンドは、2 つの単一引用符のセットを 1 つの単一引用符に置き換えるだけです。

1 行に複数のキーと値のペアがある場合、最初のコマンドは機能しません。その場合は、:%s/, \(.*\):/, '\1':/2 つの式の先頭にカンマとスペースがあるようなコマンドを試してみてください。各オブジェクトの最初のエントリはカンマで始まっていないため、クリーンアップする必要があります。

/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[^',]\+\実際の一致です。基本的には、一重引用符やカンマ以外の文字の値のみに一致します。

  • '&'一重引用符で囲まれた一致をそれ自体で置き換えます。

関連情報