Comment formater automatiquement JSON sur Enregistrer dans Vim

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

je voulais formater les fichiers JSON sur save de la même façon.

Question: Comment formater automatiquement/indent/lint les fichiers json sur Enregistrer dans vim.

27
demandé sur Ali 2014-10-06 14:16:17

7 réponses

dans une commande, essayez ceci:

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

Vous pouvez alors ajouter votre propre liaison de clé pour en faire une touche plus simple. Bien sûr, pour que cela fonctionne, vous devez avoir installé Python sur votre machine.

45
répondu Jose B 2014-10-06 13:46:08

si vous êtes désireux d'utiliser un outil externe et que vous faites du travail avec json, je suggère d'utiliser le jq:

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

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

17
répondu Kyr 2016-01-14 14:05:33

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

avertissement ceci écrasera votre tampon. Donc, si vous OUVREZ un fichier json qui a déjà une erreur de syntaxe, vous perdrez tout votre fichier (ou 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 avoir python sur votre machine, bien sûr.

EDIT: cette prochaine devrait pas remplacer votre tampon si votre json a erreur. Ce qui en fait la bonne réponse, mais puisque je n'ai pas une bonne compréhension du script Vim ou shell pour cette question, je le présente comme une chose expérimentale que vous pouvez essayer si vous vous sentez chanceux. Cela dépend peut-être aussi de votre coquille. 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>
6
répondu Ali 2016-07-15 17:44:08

une recherche de plugins JSON sur vim.org returned this:

jdaddy.vim : JSON manipulation et jolie impression

C'est le suivant sur la description:

gqaj "assez imprime" (enveloppement/tirets/sortes de clés/sinon nettoie) la construction JSON sous le curseur.

si elle fait le formatage que vous attendez alors vous pouvez créer un autocmd BufWritePre au format lors de l'enregistrement.

3
répondu mMontu 2014-10-06 12:32:08

%!python -m json.tool

ou

%!python -c "import json, sys, collections; print json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), ensure_ascii=False, indent=4)"

vous pouvez ajouter ceci à votre vimrc:

com! FormatJSON %!python -m json.tool

que vous pouvez utiliser :FormatJson format des fichiers json

3
répondu Pegasus 2018-01-26 03:43:54

Vim Mise En Forme Automatique

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

il y a ce plugin Vim qui prend en charge le format automatique multiple et les schémas de tirets ainsi que l'extension avec des formateurs personnalisés par type de fichier.

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

Remarque:

Vous aurez besoin d'avoir nodejs et js-beautify installé en tant que vim-autoformat utilise ceux-ci comme outil externe par défaut.

npm install -g js-beautify

2
répondu Josh Peak 2016-09-18 22:19:01

vous pouvez rechercher' vim-JSON-line-format ' plugin, ouvrir un fichier dans Normal mode, déplacez votre curseur sur le json ligne, utilisez <leader>pj pour afficher formatées en json par imprimer, utilisez <leader>wj pourrait changer le texte en format JSON. JSON invalide ne peut pas formater!

0
répondu zzuse 2017-03-31 05:43:57