背景:在Vim中时不时会把工作中需要的json内容copy进来查看,可是json内容是一行string,比如{"Name":"abc","Author":"athor","Data":{"subsdiary":"HM","Title":"Engineer","Carrer":["a","b"]}}
(1)很难看,若是人来格式化,浪费时间,
(2)而且我希望一个在一个文件中对比几个json。
虽然Vim默认支持后缀是".json"的文件,但并不支持一个文件中只有几行是json的情况。
方案:用外部工具jq 。有人正好本地安装有Python3,那也有另一个Vim plugin完成相同任务。但我的开发是不涉及任何python,而且并不想为了这个目的单独安装Python3,并且jq更小巧,所以还是jq更对我的胃口。
准备步骤:
1. 下载jq到本地,并解压到特定目录。我解压后的文件是jq-win64.exe. (我的OS是Win10 64bit)
2. 配置OS的path,能搜索到刚解压的folder
3. 启动gVim(若下载前打开了,请关闭重新打开。)
4: Vim的command line mode中输入!jq-win64,如果弹出console窗口显示jq内容,那就准备好了。(!表示在shell中执行命令)
执行:
1. gVim中输入{"a":1}
2. Vim的command line mode中输入1!jq-win64 回车 。
这里1表示我只想格式化第1行的json string。
格式化1到最后一行,用1,$!jq-win64。
格式化当前cursor所在行以及之后5行,用 .,.+5!jq-win64(range的概念参考这里)
任务完成!
改进:
当然,这个的缺点是要输入文件名jq-win64,太长。可以自定义一个command,参考这里,它定义了一个FormatJSON命令,command FormatJSON %!jq .。根据Vim的help描述,自定义command用:com[mand][!] [{attr}...] {cmd} {rep}。
这里FormatJSON就是{cmd}, %!jq就是{rep}。作者用的jq文件名就是jq。
参考: