Comment formater le fichier JSON dans Vim


Réponses:


47

Ou vous pouvez installer jqce qui est plus rapide (écrit en C) à partir de votre gestionnaire de paquets (par exemple sudo apt install jqdans Ubuntu / Debian, sudo dnf install jqsur Fedora / RHEL / CentOS) ou à partir de la source , puis dans vim, tapez:

:%!jq .

1
:%!jqfonctionne aussi bien pour moi.
Micks Ketches

3
Hm ... ne fonctionne qu'avec l'ajout .pour moi. Je me demande pourquoi.
Costa

29

Ce one-liner fonctionne bien pour formater JSON dans Vim dans une forme lisible par l'homme:

:%!python -m json.tool


1
Le mémorisez-vous et le tapez-vous à chaque fois ou utilisez-vous une sorte d'alias?
asedsami

J'ai tendance à utiliser la :%!jq .réponse ces jours-ci, car je fais moins avec Python et j'ai tendance à avoir jqinstallé sur mes systèmes pour tout travail JSON en CLI. Je reçois également des notifications pour cette question SO assez souvent, donc cela m'aide à ne pas oublier: PI préfère vim avec une personnalisation minimale, pas de plugins, etc., ce qui est une autre raison pour laquelle la jqsolution est maintenant ma préférée.
ljs.dev

(mise à jour de la réponse acceptée pour refléter cela)
ljs.dev

3
Juste un avertissement que cela échappera à certains caractères uniquement en ASCII. Donc, si vous voulez que l'encodage UTF8 jq soit la meilleure option.
AndrewHarvey

5

Pour formater de manière déterministe, nous devons trier le hachage. Aucune des autres réponses n'a fait cela pour moi, alors j'ai créé la mienne:

function! FormatJson()
python << EOF
import vim
import json
try:
    buf = vim.current.buffer
    json_content = '\n'.join(buf[:])
    content = json.loads(json_content)
    sorted_content = json.dumps(content, indent=4, sort_keys=True)
    buf[:] = sorted_content.split('\n')
except Exception, e:
    print e
EOF
endfunction

Usage:

:call FormatJson()

Bienvenue chez Vi et Vim ! Belle première réponse; il est intéressant de considérer l'aspect tri!
D. Ben Knoble

À propos du tri, je suis presque sûr que jqmentionné dans les réponses SebMa a une --sort-keysoption qui ferait le travail. Mais c'est cool d'écrire aussi votre propre implémentation :)
statox

1

Si PHP est disponible, ajoutez l'outil en jftant que formateur JSON par compositeur:

$ composer global require codegear/json-formatter

Ensuite, formatez le fichier actuel:

:%!jf %

Ou ajoutez un clavier dans vimrc:

nnoremap <Leader>jf :%!jf %<CR>

1

J'utilise cette :Jsonfcommande. Il peut formater unicode.

command! Jsonf :execute '%!python -c "import json,sys,collections,re; sys.stdout.write(re.sub(r\"\\\u[0-9a-f]{4}\", lambda m:m.group().decode(\"unicode_escape\").encode(\"utf-8\"),json.dumps(json.load(sys.stdin, object_pairs_hook=collections.OrderedDict), indent=2)))"'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.