在vim中,JSON的默认缩进是:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
但我的期望是:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
我做了谷歌并尝试了一些vim-json插件,但没有一个能解决这个问题。
答案 0 :(得分:30)
更简单的方法是将外部命令作为选择的过滤器。例如
:!python -m json.tool
答案 1 :(得分:25)
romainl推荐是首选方法,但有时你需要在一些没有json
文件类型的缓冲区内缩进JSON文本。我使用这个很好的命令:
command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool
只需运行:JsonTool
即可打印当前行。它也需要一个范围:
:JsonTool
:'<,'>JsonTool
:10,25JsonTool
如果你没有python或者更喜欢纯粹的vim解决方案,你可能会对Tim Pope的jdaddy插件感兴趣。 Jdaddy提供JSON文本对象:aj
和ij
以及打印打印JSON格式,例如: gqaj
。
答案 2 :(得分:12)
您可以发送到外部工具,例如,如果您有python,您可以使用以下命令将内容发送到python的json工具:
:%!python -m json.tool
答案 3 :(得分:7)
python -m json.tool
重新排序JSON对象属性的位置,如果安装了节点,则只需使用此功能:
function FormatJSON(...)
let code="\"
\ var i = process.stdin, d = '';
\ i.resume();
\ i.setEncoding('utf8');
\ i.on('data', function(data) { d += data; });
\ i.on('end', function() {
\ console.log(JSON.stringify(JSON.parse(d), null,
\ " . (a:0 ? a:1 ? a:1 : 2 : 2) . "));
\ });\""
execute "%! node -e " . code
endfunction
映射到.vimrc中的f-j
nmap fj :<C-U>call FormatJSON(v:count)<CR>
您还可以为选项卡传递多个空格,如果您未指定任何空格,则默认为2。
4fj
我的完整.vimrc在这里https://github.com/botverse/.dotfiles/blob/master/.vimrc
答案 4 :(得分:2)
gg=G
。
答案 5 :(得分:1)
这是Ruby中的一个例子:
:%! ruby -rjson -e "print JSON.pretty_generate(JSON.parse(ARGF.read))"
(https://gist.github.com/zinovyev/c4b6ec3c24670278adfebfb9ecced84b)
答案 6 :(得分:1)
如果有jq
(source)可用,则可以在命令模式下使用:
:%!jq .
答案 7 :(得分:0)
将此语句添加到snapshotchanges
:
return this.storage.upload(`user_avatar/${n}`, fileToBeUploaded)
.snapshotChanges()
.pipe(
switchMap(refStatus => fileRef.getDownloadURL())
);
除了为此类文件定义标签行为外,它将强制使用2个空格标签显示json。