如何修复vim中的JSON缩进
How to fix JSON indentation in vim?
在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" }
]
}
我在谷歌上搜索了一些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
如果你没有python或者更喜欢纯vim解决方案,你可能会对Tim Pope的jdaddy插件感兴趣。Jdaddy提供JSON文本对象:aj
和ij
以及打印打印JSON格式,例如gqaj
。
您可以发送到外部工具,例如,如果您有python,您可以使用将内容发送到python的json工具
:%!python -m json.tool
如果您有可用的jq
(源代码(,您可以在命令模式中使用:
:%!jq .
python -m json.tool
重新排序JSON对象属性的位置,如果您安装了节点,则可以使用以下函数:
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
映射到.virc 中的f-j
nmap fj :<C-U>call FormatJSON(v:count)<CR>
您还可以为一个选项卡传递多个空格,如果没有指定任何空格,则默认为2。
4fj
我的完整.virc在这里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)
将此语句添加到/etc/vim/vimrc
:
autocmd Filetype json setlocal ts=2 sw=2 expandtab
除了定义此类文件的选项卡行为外,它还将强制json表示带有2个空格的选项卡。
您可以使用python格式化json:
:%!python -m json.tool
此外,还可以使用其他几种工具,如jsbeautify
、prettydiff
、prettier
、jq
和fixjson
。
请参阅https://medium.com/@codevalues/how-to-explore-a-json-with-thousand-of-flines-using-vim-7f9d1ec550dc了解更多详细信息。
- 如何格式化字符串以修复Javascript中的缩进
- Vim-当代码的文字字符串中有括号时,如何实现正确的缩进
- Javascript 意外返回值,带有特定的缩进
- JQuery:如何在循环 dom 元素时正确缩进字符串
- JavaScript将缩进文本转换为HTML列表重复顶层<李>'s为<ul>'s
- 如何避免/最小化列表中列表的缩进
- vim JavaScript缩进插件-命令是什么
- 使用 PEG.js 解析缩进级别
- 崇高的文本新行失去缩进
- Redactor文本编辑器– 在代码视图中重新缩进缩小的HTML
- NVD3.js缩进树问题
- 缩进第二行的文本块
- 从 coffeescript 编译到 javascript 后保持缩进
- 使用 d3.xml 而不是 d3.json 绘制可折叠缩进树
- 超级鱼子项中的文本缩进继承
- node-restify:如何缩进 JSON 输出
- 什么是 JSON 缩进级别约定
- 如何阻止emacs缩进javascript逗号分隔列表的第二行(例如array或json) ?
- 如何修复vim中的JSON缩进
- 我如何有效地将json转换为缩进文本树