Javascript 如何修复vim中的JSON缩进?
在vim中,JSON的默认缩进是:Javascript 如何修复vim中的JSON缩进?,javascript,json,vim,Javascript,Json,Vim,在vim中,JSON的默认缩进是: { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } 但我期望的是: { "employees": [ { "firstName":"Joh
{
"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插件,但没有一个能解决这个问题 romainl推荐是首选方法,但有时您需要在没有
JSON
文件类型的缓冲区中非常缩进JSON文本。我使用这个漂亮的命令:
command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool
如果您没有python或者更喜欢纯vim解决方案,那么您可能会对Tim Pope的插件感兴趣。Jdaddy提供JSON文本对象:
aj
和ij
以及打印JSON格式,例如,gqaj
更简单的方法是只使用外部命令作为选择的过滤器。e、 g
:!python-mjson.tool
例如,您可以发送到外部工具,如果您有python,您可以使用以下命令将内容发送到python的json工具:
:%!python -m json.tool
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
映射到.vimrc中的f-j
nmap fj :<C-U>call FormatJSON(v:count)<CR>
我的complete.vimrc在这里
gg=G
是您在使用vim时所需要的
:%! ruby -rjson -e "print JSON.pretty_generate(JSON.parse(ARGF.read))"
()如果您有可用的
jq
(),您可以在命令模式下使用:
:%!jq .
将此语句添加到
/etc/vim/vimrc
:
autocmd Filetype json setlocal ts=2 sw=2 expandtab
除了定义此类文件的选项卡行为外,它还将强制json使用2个空格选项卡进行表示。您是否尝试查看插件的源代码?非常感谢您的快速回复。我是一个普通的vim用户,不是一个高级用户。我不知道如何写插件。所以,不,我还没有尝试查看插件的源代码。中包含的缩进脚本按您的要求执行。romainl,非常感谢您介绍该插件。这很有效。你为什么不回答这个问题而不留下评论呢?@orwellphile是我所知道的最好的JS插件。这对我来说很有用。对于整个文件,您可以执行
:%!python-m json.tool
。请小心,如果使用python2,它将按字母顺序对属性进行排序,因此我建议在执行此操作时始终使用python3。+1,因为如果json对象已经位于不同的行上,这是很好的,但是json.tool
方法处理所有聚集在一行上的对象。
:%!jq .
autocmd Filetype json setlocal ts=2 sw=2 expandtab