如何修复vim中的JSON缩进?

问题描述 投票:0回答:10

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

javascript json vim
10个回答
45
投票

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

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

26
投票

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
以及 print 打印 JSON 格式,例如
gqaj


16
投票

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

:%!python -m json.tool

13
投票

如果你有

jq
source)可用,你可以在命令模式下使用:

:%!jq .

7
投票

python -m json.tool
重新排序 JSON 对象属性的位置,如果安装了 Node,则可以使用此功能:

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
投票
如果您使用 vim,则需要

gg=G


1
投票

这是一个 Ruby 示例:

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

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


1
投票

将此声明添加到

/etc/vim/vimrc

autocmd Filetype json setlocal ts=2 sw=2 expandtab

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


0
投票

可以使用python格式化json:

:%!python -m json.tool

此外,还有其他几个工具可以使用,例如

jsbeautify
prettydiff
prettier
jq
fixjson

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


0
投票

它类似于 @ivanleoncz (最好和最简单的一个),但有一些额外的功能(也放在 /etc/vim/vimrc 或 ~/.vimrc 上):

au! BufNewFile,BufReadPost *.{json} set filetype=json foldmethod=indent
autocmd FileType json setlocal ts=2 sts=2 sw=2 expandtab modeline autoindent smartindent
© www.soinside.com 2019 - 2024. All rights reserved.