web-dev-qa-db-fra.com

Comment formater automatiquement JSON lors de l'enregistrement dans Vim

Pour être honnête, go m'a gâté. Avec go, je me suis habitué à une norme de formatage stricte, appliquée par mon éditeur (vim), qui est presque acceptée et suivie par tous les autres membres de l'équipe et du monde entier.

Je voulais formater les fichiers JSON de la même manière. 

Question: Comment auto formater/indenter/lint les fichiers json lors de l’enregistrement dans vim.

33
Ali

Merci mMontu et Jose B, voici ce que j'ai fini par faire:

WARNINGceci écrasera votre tampon. Donc, si vous ouvrez un fichier json qui a déjà une erreur de syntaxe, vous perdrez tout votre fichier (ou pouvez le perdre). 

Ajouter cette ligne à votre ~/.vimrc 

" ALi: to indent json files on save
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool

vous devez bien sûr avoir du python sur votre machine. 

EDIT: cette prochaine ne devrait pas écraser votre tampon si votre json a une erreur. Ce qui en fait la bonne réponse, mais comme je ne connais pas très bien le script Vim ou Shell, je le présente comme une expérience que vous pouvez essayer si vous avez de la chance. Cela peut également dépendre de votre Shell. Vous êtes prévenu. 

" ALi: to indent json files on save
autocmd FileType json autocmd BufWritePre <buffer> %!python -m json.tool 2>/dev/null || echo <buffer>
8
Ali

Dans une commande, essayez ceci:

execute '%!python -m json.tool' | w  

Vous pouvez ensuite ajouter votre propre raccourci clavier pour en simplifier la frappe. Bien sûr, pour que cela fonctionne, vous devez avoir installé Python sur votre ordinateur.

56
Jose B

Si vous êtes désireux d’utiliser un outil externe et que vous travaillez avec json, je vous conseillerais d’utiliser le jq:

https://stedolan.github.io/jq/

Ensuite, vous pouvez exécuter :%!jq '.' dans vim qui remplacera le tampon actuel par la sortie de jq.

26
Kyr

Une recherche de plugins JSON sur vim.org a retourné ceci:

jdaddy.vim: Manipulation JSON et jolie impression

Il a la description suivante:

gqaj "jolies impressions" (enveloppe/indente/trie les clés/nettoie autrement). la construction JSON sous le curseur.

Si le formatage que vous attendez est correct, vous pouvez créer un autocmd BufWritePre à formater lors de l’enregistrement.

3
mMontu

Vim Autoformat

https://github.com/Chiel92/vim-autoformat

Il y a ce plugin Vim qui supporte plusieurs schémas de formatage automatique et de retrait, ainsi que l'extension avec des formateurs personnalisés par type de fichier.

https://github.com/Chiel92/vim-autoformat#default-formatprograms

Remarque: 

nodejs et js-beautify doivent être installés car vim-autoformat les utilise comme outil externe par défaut.

npm install -g js-beautify

2
Josh Peak

vous pouvez rechercher le plug-in 'vim-json-line-format', ouvrez un fichier dans Normal mode, déplacez votre curseur sur la ligne json, utilisez <leader>pj pour afficher le json formaté en l’imprimant, utilisez <leader>wj pourrait changer le texte en json formaté . JSON invalide ne peut pas formater!

0
zzuse