2014-10-06 13 views
20

Per essere onesti, go mi ha rovinato. Con go mi sono abituato ad avere uno standard di formattazione rigoroso che viene applicato dal mio editor (vim) ed è quasi accettato e seguito da tutti gli altri membri del team e di tutto il mondo.Come formattare automaticamente JSON in salvataggio su Vim

Volevo formattare i file JSON salvando allo stesso modo.

Domanda: Come formattare automaticamente/indent/lint json file su save in vim.

+0

Relate d post: [Come risolvere json indentation in vim?] (http://stackoverflow.com/q/16620835/438329) –

risposta

4

Grazie mMontu e Jose B, questo è quello che ho finito per fare:

ATTENZIONE questo sovrascrive il buffer. Quindi se apri un file JSON che ha già un errore di sintassi, perderai l'intero file (o lo perderai).

aggiungere questa linea al vostro ~/.vimrc

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

è necessario avere pitone sulla vostra macchina, naturalmente.

MODIFICA: questo non dovrebbe sovrascrivere il buffer se il tuo errore ha errore. Il che la rende la risposta corretta, ma dal momento che non ho una buona conoscenza di script o shell Vim per quella materia, la presento come una cosa sperimentale che puoi provare se ti senti fortunato. Potrebbe dipendere anche dalla tua shell. Sei avvisato.

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

C'è un modo per aggiornarlo per evitare di scrivere sul buffer se il json non è ben formattato. Punti bonus per generare un errore in una delle finestre di supporto. –

+0

@NeoZenith vedi la modifica. – Ali

+0

Il test con JSON formattato correttamente genera un errore. Non ho abbastanza script Vim per eseguire il debug dell'errore, quindi perché lo sto chiedendo qui. La prima risposta che non verifica l'annullamento del buffer funziona perfettamente per JSON ben formattato. –

3

Una ricerca di plugin JSON su vim.org restituito questo:

jdaddy.vim : JSON manipulation and pretty printing

Ha le seguenti sulla descrizione:

gqaj "belle stampe" (impacchi/trattino/ordina chiavi/altrimenti pulisce) il costrutto JSON sotto il cursore.

Se si esegue la formattazione prevista, è possibile creare un formato autocmd BufWritePre durante il salvataggio.

31

In un solo comando, provate questo:

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

È quindi possibile aggiungere il proprio chiave vincolante per renderlo una sequenza di tasti più semplice. Naturalmente, affinché funzioni, è necessario che Python sia installato sul tuo computer.

+2

Qual è lo scopo di '| w' qui? Perché non solo: ':%! Python -m json.tool'? – jhrr

+0

'| w' salva solo il buffer, senza di esso si otterrebbe il json formattato ma le modifiche non sarebbero state salvate. Dipende da cosa vuoi che io indovini. –

+0

Ah, giusto, capisco, ero confuso perché pensavo che stesse collegando il comando bash [w] (http://linux.die.net/man/1/w). Ma sì, ": scrivere" ha senso. Saluti! – jhrr

11

Se siete appassionati di utilizzo strumento esterno e si sta facendo un po 'di lavoro con JSON, vorrei suggerire utilizzando il jq:

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

Quindi, è possibile eseguire :%!jq '.' all'interno vim che sarà sostituire il buffer corrente con l'output di jq.

+1

Per chi cerca un modo per farlo in Windows, cambia le virgolette singole in virgolette doppie:':%! jq "." "assumendo che tu abbia scaricato la versione di Windows di jq e lo abbia rinominato da' jq- win64.exe' a 'jq.exe' (simile alla versione a 32 bit). Inoltre, assicurati che sia sulla tua strada. –

0

è possibile cercare 'vim-JSON-line-format' plug-in, aprire un file in Normal mode, spostare il cursore sulla linea JSON, utilizzare <leader>pj per mostrare JSON formattato da stampa, utilizzare <leader>wj potrebbe cambiare il testo in JSON formattato. Json non valido non può formattare!

1

%!python -m json.tool

o

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

è possibile aggiungere questo al vostro vimrc:

com! FormatJSON %!python -m json.tool

di quanto si può utilizzare :FormatJson file JSON in formato

Problemi correlati