Как автоматически форматировать JSON при сохранении в Vim

Если честно go испортил мне. С go Я привык к строгому стандарту форматирования, который применяется моим редактором (vim) и почти принят и сопровождается всеми остальными в команде и по всему миру.

Я хотел отформатировать файлы JSON при сохранении таким же образом.

вопрос: как автоматически форматировать/отступ/Линт JSON-файлы при сохранении в vim.

7 ответов


в одной команде попробуйте следующее:

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

затем вы можете добавить собственную привязку ключа, чтобы сделать ее более простым нажатием клавиши. Конечно, для этого вам нужно установить Python на вашем компьютере.


Если вы заинтересованы в использовании внешнего инструмента, и вы делаете некоторую работу с json, я бы предложил использовать jq:

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

затем, вы можете выполнить :%!jq '.' внутри vim, который заменит текущий буфер выходом jq.


спасибо ммонту и Хосе Б, это то, что я закончил делать:

предупреждение это перезапишет ваш буфер. Поэтому, если вы откроете файл json, который уже имеет синтаксическую ошибку, вы потеряете весь файл (или можете потерять его).

добавьте эту строку в свой ~/.vimrc

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

вам нужно иметь python на вашей машине, конечно.

EDIT: этот следующий не должен перезаписывать буфер, если ваш json имеет ошибку. Это делает его правильным ответом, но поскольку я не очень хорошо понимаю сценарий Vim или оболочку, если на то пошло, я представляю его как экспериментальную вещь, которую вы можете попробовать, если Вам ПОВЕЗЕТ. Это может зависеть и от вашей оболочки. Вы предупреждены.

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

поиск плагинов JSON на vim.org вернул это:

jdaddy.vim: манипуляция JSON и красивая печать

Он имеет следующее описание:

gqaj " pretty prints "(обертывания / отступы / сортировка ключей / в противном случае очищает) конструкция JSON под курсором.

если он выполняет форматирование, которое вы ожидаете, вы можете создать autocmd BufWritePre формат при сохранении.


%!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 файлы


Vim Autoformat

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

существует этот плагин Vim, который поддерживает несколько схем автоматического формата и отступов, а также расширение с помощью пользовательских форматеров для каждого типа файла.

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

Примечание:

вам понадобится nodejs и js-beautify установлен, как vim-autoformat использует их как внешний инструмент по умолчанию.

npm install -g js-beautify


вы можете искать плагин "vim-JSON-line-format", открыть файл в Normal mode, переместите курсор на линию json, используйте <leader>pj чтобы показать форматированный json, распечатав его, используйте <leader>wj можно изменить текст на форматированный json. Недопустимый json не может форматировать!