2016-04-02 18 views
0

bazı girdileri ile küçük JSON dosyaları var, burada bir bölüm: Ben tüm değerlerin önüne "\ U25" eklemek zorunda farkVim Yedek komuta ve regexp'in

"i":{ 
    "normale":"3c", 
    "bold":"4b", 
    "doppio":"6c"}, 
"is":{ 
    "normale":"2c", 
    "bold":"33", 
    "doppio":"66"}, 

, bu yüzden

:

:%s:\("\)\(\d\d"\)\|\("\)\(\d\w"\):"\\u25\2 fikir "gg" veya "dw" birini aramak ve "\u25 rest.This tutarken ilk çift tırnak ikame etmektir

sonucudur: Bu komutu çalıştı

"i":{ 
     "normale":"\u25, 
     "bold":"\u25, 
     "doppio":"\u25}, 
    "is":{ 
     "normale":"\u25, 
     "bold":"\u2533", 
     "doppio":"\u2566"}, 

Eşleşen dizgede yalnızca iki basamak varsa, komut düzgün çalışır: ilk çift alıntı (ilk grup) değiştirilir ve ikinci grup olduğu gibi bırakılır. Bununla birlikte, eşleşen dizede bir rakam ve bir karakter varsa, ikinci diziyi yok sayıp tüm dizeyi değiştirir. İki desen \w hariç, aynıdır, bu yüzden aynı şekilde çalışmalıdır. Ne oluyor?

cevap

1

Vim, \d rakamlarıyla eşleşir; Onaltılık haneleri eşleştirmek için \x'a ihtiyacınız var.

Ancak, :"'un tüm yinelemelerini :"\u25 ile değiştirmek istediğiniz anlaşılıyor. Eğer 2 altıgen basamağı geçtiği tüm \u25 başa eklemek istiyorsanız

:%s/\x\x/\\u25&/

+0

Aha,

:%s/:"/:"\\u25"/

Veya:

sen kullanabilir miyim! Güzel ve temiz, bunu fark etmedim. Yani, belki de benim komutum işe yaramadı çünkü "dw", "aşağıdaki karaktere sahip bir rakam" yerine bir hex karakteri olarak tanınır. –

+1

Ondalık basamaklarla eşleştiğinden ve \\ "hex basamakları eşleştiğinden"? –