2014-10-06 136 views
20

说实话go已经宠坏了我。随着go我习惯了有一个严格的格式标准,由我的编辑(vim)执行,几乎被团队和世界各地的其他人接受并遵循。如何自动格式化保存在Vim中的JSON

我想以同样的方式格式化JSON文件。

问题:如何在保存vim时自动格式化/缩进/ lint json文件。

+0

相关d post:[如何在vim中修复json缩进?](http://stackoverflow.com/q/16620835/438329) – 2014-10-06 15:27:34

回答

4

感谢mMontu和Jose B,这是我落得这样做:

警告这将覆盖缓冲区。所以如果你打开一个已经有语法错误的json文件,你将会丢失整个文件(或者可能会丢失它)。

此行添加到您的~/.vimrc

" Ali: to indent json files on save 
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool 

你需要在你的机器上的Python,当然。

编辑:如果你的json有错误,下一个不应该覆盖你的缓冲区。这使得它成为正确的答案,但由于我没有很好地理解Vim脚本或shell,所以我把它作为一个实验性的东西,如果你感觉幸运的话,你可以试试。它也可能取决于你的外壳。你被警告。

" Ali: to indent json files on save 
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool 2>/dev/null || echo <buffer> 
+0

有没有办法更新这个以防止在json格式不正确的情况下写入缓冲区。奖励积分在辅助窗口之一中产生错误。 – 2016-07-15 16:34:34

+0

@NeoZenith查看编辑。 – Ali 2016-07-15 17:44:19

+0

用格式良好的json测试它会引发错误。我没有足够的vim脚本来调试错误,因此我在这里问。第一个没有检查消除缓冲区的响应对于格式良好的json完美无缺。 – 2016-07-15 20:53:48

3

一种JSON插件搜索上vim.org返回此:

jdaddy.vim : JSON manipulation and pretty printing

它具有以下的描述:

gqaj “漂亮打印”(包裹/缩进/排序键/否则清理) 光标下的JSON构造。

如果它符合您期望的格式,那么您可以在保存时创建一个autocmd BufWritePre格式。

31

在一个命令,试试这个:

execute '%!python -m json.tool' | w 

然后,您可以添加自己的键绑定,使其更简单的按键。当然,为了这个工作,你需要在你的机器上安装Python。

+2

''| w'在这里?为什么不只是:':%!python -m json.tool'? – jhrr 2016-08-19 09:28:42

+0

'| w'只是保存了缓冲区,没有它你就会得到格式化的json,但是这些变化是未保存的。这取决于你想要什么,我猜。 – 2016-08-19 13:36:52

+0

啊,对,我看,我很困惑,因为我认为它是管道输入bash [w](http://linux.die.net/man/1/w)命令。但是,':写'是有道理的。干杯! – jhrr 2016-08-19 15:57:14

11

如果你是热衷于使用外部工具和你正在做的JSON的一些工作,我会建议使用jq

https://stedolan.github.io/jq/

然后,你可以在里面VIM执行:%!jq '.'这将用jq的输出替换当前缓冲区。

+1

对于寻找Windows方法的人,将单引号改为双引号:':%!jq“。”'假设您下载了jq的windows版本,并将其从'jq- win64.exe'到'jq.exe'(类似于32位版本)。另外,确保它在你的道路上。 – 2017-11-22 13:37:04

0

你可以搜索“VIM-JSON行格式”插件,在​​3210打开一个文件,将光标放在JSON行,使用<leader>pj显示由打印它格式化JSON,使用<leader>wj可以将文本更改为格式化的json。 无效的json无法格式化!

1

%!python -m json.tool

%!python -c "import json, sys, collections; print json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), ensure_ascii=False, indent=4)"

,你可以添加到您的vimrc:

com! FormatJSON %!python -m json.tool

比你可以使用:FormatJson格式的JSON文件