如何在vim中修复JSON缩进?

laximzn5  于 2022-11-11  发布在  其他
关注(0)|答案(9)|浏览(186)

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

jbose2ul

jbose2ul1#

更简单的方法是仅将外部命令作为选择的过滤器。
1.进行选择
1.类型:!python -m json.tool

lndjwyie

lndjwyie2#

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

d5vmydt9

d5vmydt93#

你可以发送到一个外部工具,例如,如果你有python,你可以发送内容到python的json工具,使用:

:%!python -m json.tool
8ulbf1ek

8ulbf1ek4#

如果有jqsource)可用,则可以在命令模式下使用:

:%!jq .
bakd9h0s

bakd9h0s5#

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

Map到.vimrc中的f-j

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

您还可以为制表符传递多个空格,如果不指定任何空格,则默认值为2。

4fj

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

lmvvr0a8

lmvvr0a86#

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

hfyxw5xn

hfyxw5xn7#

下面是Ruby中的一个示例:

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

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

8nuwlpux

8nuwlpux8#

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

autocmd Filetype json setlocal ts=2 sw=2 expandtab

除了定义此类文件的制表符行为外,它还将强制使用2个空格制表符表示json。

8yparm6h

8yparm6h9#

您可以使用python来格式化json:

:%!python -m json.tool

除此之外,还有其他几种工具可以使用,如jsbeautifyprettydiffprettierjqfixjson
有关详细信息,请参阅https://medium.com/@codevalues/how-to-explore-a-json-with-thousands-of-lines-using-vim-7f9d1ec550dc

相关问题