5

我有一个格式不正确的简单 json 文件,它看起来像:

{ ID: '092558667',  
  NAME: 'Store Made',  
  PARENT_CATEGORY_ID: '692558669',  
  INCLUDED_IN_NET_SALES: '1' }  

我需要做的就是将字段名称用双引号括起来。在 vim 中,我得到的最接近的是将字段名称和冒号括在引号中 - 显然我需要弄清楚如何在没有冒号的情况下获取字符串。这是我正在尝试的:

:%s/[A-Z_]*:/"&"

如果我将冒号排除在查询之外,则最终会选择整个文件。

4

2 回答 2

8

您可以使用捕获组

%s/\([A-Z_]*\):/"\1":/

要正确处理已引用的键:

%s/"\?\([A-Z_]*\)"\?:/"\1":/
于 2013-09-30T16:29:49.157 回答
3

好的,有了上面的信息,我最终得到了这个:

:%s/[ \t]\([A-Za-z_].*\):/"\1":/
  • 它支持大写小写字符
  • 它跳过已经引用的字段

由于这可以被视为完成,我将其映射到 .vimrc 中的 vim 完成快捷方式 ctrl-x ctrl-j (它们都以 ctrl-x 开头):

:noremap <C-x><C-j> :%s/[ \t]\([A-Za-z_].*\):/"\1":/<CR>
于 2015-08-11T08:51:34.623 回答