如何修复vim中的JSON缩进?

use*_*998 30 javascript vim json

在vim中,JSON的默认缩进是:

{
    "employees": [
    { "firstName":"John" , "lastName":"Doe" }, 
    { "firstName":"Anna" , "lastName":"Smith" }, 
    { "firstName":"Peter" , "lastName":"Jones" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但我的期望是:

{
    "employees": [
        { "firstName":"John" , "lastName":"Doe" }, 
        { "firstName":"Anna" , "lastName":"Smith" }, 
        { "firstName":"Peter" , "lastName":"Jones" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我做了google并尝试了一些vim-json插件,但没有一个能解决这个问题.

awe*_*son 32

更简单的方法是将外部命令作为选择的过滤器.例如

  1. 做出选择
  2. 类型 :!python -m json.tool

  • 这对我有用.对于整个文件,可以执行`:%!python -m json.tool`. (8认同)

Pet*_*ker 25

romainl推荐是首选方法,但有时您需要在没有json文件类型的某个缓冲区内进行非常缩进的JSON文本.我使用这个很好的命令:

command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool
Run Code Online (Sandbox Code Playgroud)

只需运行:JsonTool它就会打印当前行.它也需要一个范围:

:JsonTool
:'<,'>JsonTool
:10,25JsonTool
Run Code Online (Sandbox Code Playgroud)

如果你没有python或者更喜欢纯粹的vim解决方案,你可能会对Tim Pope的jdaddy插件感兴趣.Jdaddy提供JSON文本对象:ajij以及打印打印JSON格式,例如gqaj.


Reu*_*ani 13

您可以发送到外部工具,例如,如果您有python,您可以使用以下命令将内容发送到python的json工具:

:%!python -m json.tool
Run Code Online (Sandbox Code Playgroud)


Alf*_*Osa 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
Run Code Online (Sandbox Code Playgroud)

映射到f-j.vimrc

nmap fj :<C-U>call FormatJSON(v:count)<CR>
Run Code Online (Sandbox Code Playgroud)

您还可以为选项卡传递多个空格,如果您未指定任何空格,则默认为2.

4fj
Run Code Online (Sandbox Code Playgroud)

我完整的.vimrc在这里https://github.com/botverse/.dotfiles/blob/master/.vimrc


gab*_*bra 5

如果您有jq( source ) 可用,则可以在命令模式下使用:

:%!jq .
Run Code Online (Sandbox Code Playgroud)