回答:
またはjq
、パッケージマネージャー(sudo apt install jq
Ubuntu / Debian、sudo dnf install jq
Fedora / RHEL / CentOSなど)またはソースから vimに次のように入力して、(Cで記述された)より高速なものをインストールできます。
:%!jq .
:%!jq
私も同じように機能します。
.
私のために追加された場合にのみ機能します。なんでかしら。
このワンライナーは、VimのJSONを人間が読める形式にフォーマットするのに適しています。
:%!python -m json.tool
:%!jq .
最近、Pythonをあまり使用せずjq
、CLIでのJSON作業のためにシステムにインストールする傾向があるため、この答えを使用する傾向があります。私もこのSO質問の通知を頻繁に受け取るので、:PIが最小限のカスタマイズ、プラグインなしのvimを好むことを忘れないようにするのに役立ちますjq
。
確定的な方法でフォーマットするには、ハッシュをソートする必要があります。他の答えはどれも私のためにそれをしなかったので、私は自分で作成しました:
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
使用法:
:call FormatJson()
jq
SebMaの回答で言及されているのは、--sort-keys
その仕事を行うオプションがあると確信しています。しかし、独自の実装を書くのもクールです:)
PHPを使用できる場合は、Composerによってツールjf
をJSONフォーマッターとして追加します。
$ composer global require codegear/json-formatter
次に、現在のファイルをフォーマットします。
:%!jf %
または、vimrcにキーマップを追加します。
nnoremap <Leader>jf :%!jf %<CR>
この:Jsonf
コマンドを使用します。ユニコードをフォーマットできます。
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)))"'