2014-10-06 135 views
20

說實話go已經寵壞了我。隨着go我習慣了有一個嚴格的格式標準,由我的編輯(vim)執行,幾乎被團隊和世界各地的其他人接受並遵循。如何自動格式化保存在Vim中的JSON

我想以同樣的方式格式化JSON文件。

問題:如何在保存vim時自動格式化/縮進/ lint json文件。

+0

相關d post:[如何在vim中修復json縮進?](http://stackoverflow.com/q/16620835/438329) – 2014-10-06 15:27:34

回答

4

感謝mMontu和Jose B,這是我落得這樣做:

警告這將覆蓋緩衝區。所以如果你打開一個已經有語法錯誤的json文件,你將會丟失整個文件(或者可能會丟失它)。

此行添加到您的~/.vimrc

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

你需要在你的機器上的Python,當然。

編輯:如果你的json有錯誤,下一個不應該覆蓋你的緩衝區。這使得它成爲正確的答案,但由於我沒有很好地理解Vim腳本或shell,所以我把它作爲一個實驗性的東西,如果你感覺幸運的話,你可以試試。它也可能取決於你的外殼。你被警告。

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

有沒有辦法更新這個以防止在json格式不正確的情況下寫入緩衝區。獎勵積分在輔助窗口之一中產生錯誤。 – 2016-07-15 16:34:34

+0

@NeoZenith查看編輯。 – Ali 2016-07-15 17:44:19

+0

用格式良好的json測試它會引發錯誤。我沒有足夠的vim腳本來調試錯誤,因此我在這裏問。第一個沒有檢查消除緩衝區的響應對於格式良好的json完美無缺。 – 2016-07-15 20:53:48

3

一種JSON插件搜索上vim.org返回此:

jdaddy.vim : JSON manipulation and pretty printing

它具有以下的描述:

gqaj 「漂亮打印」(包裹/縮進/排序鍵/否則清理) 光標下的JSON構造。

如果它符合您期望的格式,那麼您可以在保存時創建一個autocmd BufWritePre格式。

31

在一個命令,試試這個:

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

然後,您可以添加自己的鍵綁定,使其更簡單的按鍵。當然,爲了這個工作,你需要在你的機器上安裝Python。

+2

''| w'在這裏?爲什麼不只是:':%!python -m json.tool'? – jhrr 2016-08-19 09:28:42

+0

'| w'只是保存了緩衝區,沒有它你就會得到格式化的json,但是這些變化是未保存的。這取決於你想要什麼,我猜。 – 2016-08-19 13:36:52

+0

啊,對,我看,我很困惑,因爲我認爲它是管道輸入bash [w](http://linux.die.net/man/1/w)命令。但是,':寫'是有道理的。乾杯! – jhrr 2016-08-19 15:57:14

11

如果你是熱衷於使用外部工具和你正在做的JSON的一些工作,我會建議使用jq

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

然後,你可以在裏面VIM執行:%!jq '.'這將用jq的輸出替換當前緩衝區。

+1

對於尋找Windows方法的人,將單引號改爲雙引號:':%!jq「。」'假設您下載了jq的windows版本,並將其從'jq- win64.exe'到'jq.exe'(類似於32位版本)。另外,確保它在你的道路上。 – 2017-11-22 13:37:04

0

你可以搜索「VIM-JSON行格式」插件,在​​3210打開一個文件,將光標放在JSON行,使用<leader>pj顯示由打印它格式化JSON,使用<leader>wj可以將文本更改爲格式化的json。 無效的json無法格式化!

1

%!python -m json.tool

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

,你可以添加到您的vimrc:

com! FormatJSON %!python -m json.tool

比你可以使用:FormatJson格式的JSON文件