Dans vim, l'indentation par défaut pour JSON est la suivante:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
Mais ce que j'attends, c'est:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
J'ai utilisé Google pour essayer quelques plugins vim-json, mais aucun d’entre eux ne résout ce problème.
Le moyen le plus simple consiste simplement à utiliser une commande externe en tant que filtre pour une sélection. par exemple.
:!python -m json.tool
la recommandation romainl est la méthode recommandée, mais vous devez parfois indenter du texte JSON dans un tampon qui n'a pas le type de fichier json
. J'utilise cette belle commande:
command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool
Il suffit de lancer :JsonTool
et cela imprimera assez la ligne courante. Cela peut aussi prendre une gamme:
:JsonTool
:'<,'>JsonTool
:10,25JsonTool
Si vous n'avez pas Python ou si vous préférez une solution purement vim, vous devriez peut-être vous intéresser au plugin jdaddy de Tim Pope. Jdaddy fournit des objets texte JSON: aj
et ij
ainsi que le formatage JSON impression-impression, par exemple. gqaj
.
Vous pouvez envoyer à un outil externe, par exemple, si vous avez python, vous pouvez envoyer le contenu à l'outil json de python à l'aide de:
:%!python -m json.tool
python -m json.tool
réordonne la position des propriétés de l'objet JSON. Si vous avez un nœud installé, vous pouvez simplement utiliser cette fonction:
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
Mappé sur f-j
dans .vimrc
nmap fj :<C-U>call FormatJSON(v:count)<CR>
Vous pouvez également passer un nombre d'espaces pour un onglet, 2 par défaut si vous n'en spécifiez pas.
4fj
Mon .vimrc complet est ici https://github.com/botverse/.dotfiles/blob/master/.vimrc
gg=G
est ce dont vous avez besoin si vous utilisez vim.
Voici un exemple en Ruby:
:%! Ruby -rjson -e "print JSON.pretty_generate(JSON.parse(ARGF.read))"
( https://Gist.github.com/zinovyev/c4b6ec3c24670278adfebfb9ecced84b )