Ответ 1
Проще всего - использовать внешнюю команду в качестве фильтра для выбора. например
- Сделать выбор
- Тип
:!python -m json.tool
В vim отступ по умолчанию для JSON:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
Но я ожидаю:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
Я сделал google и пробовал некоторые плагины vim-json, но никто из них не исправил эту проблему.
Проще всего - использовать внешнюю команду в качестве фильтра для выбора. например
:!python -m json.tool
romainl - это предпочтительный способ, но иногда вам нужен довольно текст JSON с отступом внутри некоторого буфера, который не имеет типа файла json
. Я использую эту приятную команду:
command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool
Просто запустите :JsonTool
, и он будет довольно печатать текущую строку. Он также может иметь диапазон:
:JsonTool
:'<,'>JsonTool
:10,25JsonTool
Если у вас нет питона или вы предпочитаете чистое решение vim, вам может быть интересен плагин Tim Pope jdaddy. Jdaddy предоставляет текстовые объекты JSON: aj
и ij
, а также форматирование JSON для печати печати, например. gqaj
.
В качестве примера вы можете отправить внешнему инструменту, если у вас есть python, вы можете отправить контент в инструмент python json, используя:
:%!python -m json.tool
python -m json.tool
переупорядочивает положение свойств объекта JSON, если у вас установлено node, вы можете просто использовать эту функцию:
function FormatJSON(...)
let code="\"
\ var i = process.stdin, d = '';
\ i.resume();
\ i.setEncoding('utf8');
\ i.on('data', function(data) { d += data; });
\ i.on('end', function() {
\ console.log(JSON.stringify(JSON.parse(d), null,
\ " . (a:0 ? a:1 ? a:1 : 2 : 2) . "));
\ });\""
execute "%! node -e " . code
endfunction
Отображается на f-j
в .vimrc
nmap fj :<C-U>call FormatJSON(v:count)<CR>
Вы также можете передать количество пробелов для вкладки, 2 - по умолчанию, если вы не указали.
4fj
Мой полный .vimrc находится здесь https://github.com/botverse/.dotfiles/blob/master/.vimrc
gg=G
- это то, что вам нужно, если вы используете vim.
Вот пример Ruby:
:%! ruby -rjson -e "print JSON.pretty_generate(JSON.parse(ARGF.read))"
(https://gist.github.com/zinovyev/c4b6ec3c24670278adfebfb9ecced84b)
Если у вас есть jq
(источник), вы можете использовать в командном режиме:
:%!jq .