如何修复vim中的JSON缩进

How to fix JSON indentation in vim?

本文关键字:JSON 缩进 中的 vim 何修复      更新时间:2023-09-26

在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插件,但没有一个能解决这个问题。

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

  1. 进行选择
  2. 类型:!python -m json.tool

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文本对象:ajij以及打印打印JSON格式,例如gqaj

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

:%!python -m json.tool

如果您有可用的jq(源代码(,您可以在命令模式中使用:

:%!jq .

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

映射到.virc 中的f-j

nmap fj :<C-U>call FormatJSON(v:count)<CR>

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

4fj

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

gg=G是您在使用vim时所需要的。

下面是Ruby中的一个例子:

:%! ruby -rjson -e "print JSON.pretty_generate(JSON.parse(ARGF.read))"

(https://gist.github.com/zinovyev/c4b6ec3c24670278adfebfb9ecced84b)

将此语句添加到/etc/vim/vimrc:

autocmd Filetype json setlocal ts=2 sw=2 expandtab

除了定义此类文件的选项卡行为外,它还将强制json表示带有2个空格的选项卡。

您可以使用python格式化json:

:%!python -m json.tool

此外,还可以使用其他几种工具,如jsbeautifyprettydiffprettierjqfixjson

请参阅https://medium.com/@codevalues/how-to-explore-a-json-with-thousand-of-flines-using-vim-7f9d1ec550dc了解更多详细信息。