use*_*998 30 javascript vim json
在vim中,JSON的默认缩进是:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
Run Code Online (Sandbox Code Playgroud)
但我的期望是:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
Run Code Online (Sandbox Code Playgroud)
我做了google并尝试了一些vim-json插件,但没有一个能解决这个问题.
awe*_*son 32
更简单的方法是将外部命令作为选择的过滤器.例如
:!python -m json.tool
Pet*_*ker 25
romainl推荐是首选方法,但有时您需要在没有json
文件类型的某个缓冲区内进行非常缩进的JSON文本.我使用这个很好的命令:
command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool
Run Code Online (Sandbox Code Playgroud)
只需运行:JsonTool
它就会打印当前行.它也需要一个范围:
:JsonTool
:'<,'>JsonTool
:10,25JsonTool
Run Code Online (Sandbox Code Playgroud)
如果你没有python或者更喜欢纯粹的vim解决方案,你可能会对Tim Pope的jdaddy插件感兴趣.Jdaddy提供JSON文本对象:aj
和ij
以及打印打印JSON格式,例如gqaj
.
Reu*_*ani 13
您可以发送到外部工具,例如,如果您有python,您可以使用以下命令将内容发送到python的json工具:
:%!python -m json.tool
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
映射到f-j
.vimrc
nmap fj :<C-U>call FormatJSON(v:count)<CR>
Run Code Online (Sandbox Code Playgroud)
您还可以为选项卡传递多个空格,如果您未指定任何空格,则默认为2.
4fj
Run Code Online (Sandbox Code Playgroud)
我完整的.vimrc在这里https://github.com/botverse/.dotfiles/blob/master/.vimrc