Vim - 替换命令和正则表达式

时间:2016-04-02 17:10:31

标签: vim

我有一些带有一些条目的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之外,这两种模式是相同的,因此它应该完全相同。发生了什么事?

1 个答案:

答案 0 :(得分:1)

Vim将\d与数字匹配;您需要\x匹配十六进制数字。

但似乎您希望将所有:"替换为:"\u25

你能用:

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

或者,如果您想将\u25添加到所有出现的2个十六进制数字,

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