我有一些带有一些条目的JSON文件,这是一个部分:
"i":{
"normale":"3c",
"bold":"4b",
"doppio":"6c"},
"is":{
"normale":"2c",
"bold":"33",
"doppio":"66"},
我意识到我必须在所有值前添加“\ u25”,所以我尝试了这个命令:
:%s:\("\)\(\d\d"\)\|\("\)\(\d\w"\):"\\u25\2
想法是搜索“dd”或“dw”,并用"\u25
替换第一个双引号,同时保留其余部分。这是结果:
"i":{
"normale":"\u25,
"bold":"\u25,
"doppio":"\u25},
"is":{
"normale":"\u25,
"bold":"\u2533",
"doppio":"\u2566"},
如果匹配的字符串只有两位数,则该命令正常工作:第一个双引号(第一组)被替换,第二组保持原样。
但是,如果匹配的字符串有一个数字和一个字符,它似乎忽略第二个组,替换整个字符串。除了\w
之外,这两种模式是相同的,因此它应该完全相同。发生了什么事?
答案 0 :(得分:1)
Vim将\d
与数字匹配;您需要\x
匹配十六进制数字。
但似乎您希望将所有:"
替换为:"\u25
。
你能用:
:%s/:"/:"\\u25"/
或者,如果您想将\u25
添加到所有出现的2个十六进制数字,
:%s/\x\x/\\u25&/