gVim中格式化部分json string(也可以整个文件)

背景:在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。

 

参考:

 https://vi.stackexchange.com/questions/5835/how-to-run-bash-command-over-current-file-and-replace-buffer-with-result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值