使用vim的查找和替换功能在JSON字段名周围加上引号

5
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我有一个简单的JSON文件,格式不太好看,它看起来像:

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

我所需做的就是将字段名用双引号括起来。在vim中,我最接近的方法是将字段名和冒号用引号括起来 - 显然,我需要弄清楚如何获取未包含冒号的字符串。这是我正在尝试的:

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

如果我在查询中省略了冒号,整个文件将被选中。
2个回答

8
你可以使用“捕获组”来提取信息:

你可以使用捕获组来提取信息:

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

为了正确处理已经引用过的键:

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

2
vim高尔夫:%s/[A-Z_]\+\ze:/"&" - Peter Rincker

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接