Tambahkan kutipan ke sejumlah besar kata di vim


0

Jadi saya membuat sejumlah besar objek javascript dengan sintaks literal dan saya lupa menggunakan tanda kutip untuk banyak kunci, banyak pasangan nilai kunci. Bagaimana saya menyusun regex untuk "menambahkan tanda kutip tunggal ke string yang tidak dikutip tunggal diikuti dengan segera dengan tanda titik dua" dalam vim?

Saya mencoba regex yang ditemukan di sini tetapi menambahkan seperangkat tanda kutip kosong setelah kunci.


Anda tidak perlu mengutip kunci, hanya nilai string.
romainl

Jawaban:


2

Saya akan mengira bahwa masing-masing kunci Anda: pasangan nilai berada pada barisnya sendiri, seperti:

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

Kemudian 2 regex / substitusi berikut memenuhi apa yang Anda butuhkan: :%s/\(.*\):/'\1':/diikuti oleh%s/''/'/

Yang pertama menggantikan semua teks yang mendahului titik dua (itu \(.*\):bagian) dengan teks yang sama (tetapi dikelilingi oleh tanda kutip) dan titik dua lagi ( '\1':bagian). Ini tidak memperhitungkan kunci apa pun yang sudah dikutip, sehingga perintah kedua hanya mengganti set dari 2 kutipan tunggal dengan hanya 1 kutipan tunggal.

Perintah pertama tidak akan berfungsi jika Anda memiliki beberapa kunci: pasangan nilai pada satu baris. Jika demikian, Anda dapat mencoba sesuatu seperti di :%s/, \(.*\):/, '\1':/mana ada koma dan spasi di awal dua ekspresi. Anda masih harus membersihkan entri pertama di setiap objek, karena itu tidak didahului oleh koma.

Apa pun perintah yang Anda gunakan, saya sarankan mengakhirinya dengan /c, karena dengan :%s/\(.*\):/'\1':/cbegitu Anda dapat mengonfirmasi setiap penggantian, setidaknya untuk memastikan itu berfungsi seperti yang Anda inginkan.

Semoga berhasil!


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

sepertinya melakukan trik:

  • ^.\{-}:\s* cocok dengan semua nilai sebelum:

     ^             | .\{-}:              | \s*
    ---------------+---------------------+--------------------
     start of line | any character,      | as much whitespace
                   | as few as possible, | as possible
                   | until the 1st colon |
    
  • \zs[^',]\+\adalah pertandingan kami yang sebenarnya. Itu hanya cocok dengan nilainya, pada dasarnya sebanyak mungkin karakter apa pun yang bukan kutipan tunggal atau koma.

  • '&' mengganti pertandingan dengan sendirinya dikelilingi oleh tanda kutip tunggal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.