如何自动格式化保存在Vim中的JSON
说实话go
已经宠坏了我。随着go
我习惯了有一个严格的格式标准,由我的编辑(vim)执行,几乎被团队和世界各地的其他人接受并遵循。如何自动格式化保存在Vim中的JSON
我想以同样的方式格式化JSON文件。
问题:如何在保存vim时自动格式化/缩进/ lint json文件。
感谢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>
有没有办法更新这个以防止在json格式不正确的情况下写入缓冲区。奖励积分在辅助窗口之一中产生错误。 – 2016-07-15 16:34:34
@NeoZenith查看编辑。 – Ali 2016-07-15 17:44:19
用格式良好的json测试它会引发错误。我没有足够的vim脚本来调试错误,因此我在这里问。第一个没有检查消除缓冲区的响应对于格式良好的json完美无缺。 – 2016-07-15 20:53:48
一种JSON插件搜索上vim.org返回此:
jdaddy.vim : JSON manipulation and pretty printing
它具有以下的描述:
gqaj
“漂亮打印”(包裹/缩进/排序键/否则清理) 光标下的JSON构造。
如果它符合您期望的格式,那么您可以在保存时创建一个autocmd BufWritePre
格式。
在一个命令,试试这个:
execute '%!python -m json.tool' | w
然后,您可以添加自己的键绑定,使其更简单的按键。当然,为了这个工作,你需要在你的机器上安装Python。
如果你是热衷于使用外部工具和你正在做的JSON的一些工作,我会建议使用jq
:
https://stedolan.github.io/jq/
然后,你可以在里面VIM执行:%!jq '.'
这将用jq的输出替换当前缓冲区。
对于寻找Windows方法的人,将单引号改为双引号:':%!jq“。”'假设您下载了jq的windows版本,并将其从'jq- win64.exe'到'jq.exe'(类似于32位版本)。另外,确保它在你的道路上。 – 2017-11-22 13:37:04
Vim的自动格式化
https://github.com/Chiel92/vim-autoformat
有此Vim插件,它支持多个自动格式和缩进方案,以及与每文件类型自定义格式延伸。
https://github.com/Chiel92/vim-autoformat#default-formatprograms
注:
你需要有nodejs
和js-beautify
安装为vim-autoformat
使用这些作为默认的外部工具。
npm install -g js-beautify
你可以搜索“VIM-JSON行格式”插件,在3210打开一个文件,将光标放在JSON行,使用<leader>pj
显示由打印它格式化JSON,使用<leader>wj
可以将文本更改为格式化的json。 无效的json无法格式化!
%!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文件
相关d post:[如何在vim中修复json缩进?](http://stackoverflow.com/q/16620835/438329) – 2014-10-06 15:27:34