2013-05-18 35 views
20

Trong vim, thụt đầu dòng mặc định cho JSON là:Làm thế nào để sửa lỗi thụt lề JSON trong vim?

{ 
    "employees": [ 
    { "firstName":"John" , "lastName":"Doe" }, 
    { "firstName":"Anna" , "lastName":"Smith" }, 
    { "firstName":"Peter" , "lastName":"Jones" } 
    ] 
} 

Nhưng những gì tôi mong đợi là:

{ 
    "employees": [ 
     { "firstName":"John" , "lastName":"Doe" }, 
     { "firstName":"Anna" , "lastName":"Smith" }, 
     { "firstName":"Peter" , "lastName":"Jones" } 
    ] 
} 

Tôi đã google và thử một số plugin vim-json, nhưng không ai trong số họ khắc phục vấn đề này .

+1

Bạn đã cố gắng nhìn vào nguồn gốc của các plugin? –

+1

Cảm ơn rất nhiều vì đã trả lời nhanh. Tôi là người dùng vim bình thường, không phải người dùng nâng cao. Tôi không biết cách viết plugin. Vì vậy, không, tôi đã không cố gắng tìm kiếm nguồn bổ sung. – user2309998

+1

Kịch bản thụt lề có trong [plugin này] (https://github.com/jakar/vim-json) thực hiện những gì bạn yêu cầu. – romainl

Trả lời

25

đề xuất romainl là cách ưa thích, nhưng đôi khi bạn cần phải nhập văn bản JSON thụt vào bên trong một số bộ đệm không có kiểu tệp json. Tôi sử dụng lệnh tuyệt vời này:

command! -range -nargs=0 -bar JsonTool <line1>,<line2>!python -m json.tool 

Chỉ cần chạy :JsonTool và nó sẽ in dòng hiện tại. Có thể mất một loạt cũng như:

:JsonTool 
:'<,'>JsonTool 
:10,25JsonTool 

Nếu bạn không có python hoặc muốn có một giải pháp vim tinh khiết bạn có thể quan tâm đến jdaddy Plugin Tim Pope. Jdaddy cung cấp các đối tượng văn bản JSON: ajij cũng như định dạng JSON in in, ví dụ: gqaj.

+0

Điều này thật tuyệt vời, cảm ơn bạn rất nhiều. – pjam

22

Cách dễ dàng hơn là chỉ lệnh bên ngoài làm bộ lọc cho lựa chọn. ví dụ.

  1. Thực hiện một lựa chọn
  2. ĐỊNH DẠNG: python -m json.tool
+3

Điều này làm việc cho tôi. Và đối với toàn bộ tập tin, người ta có thể làm ':%! Python -m json.tool'. – Waseem

10

Bạn có thể gửi đến một công cụ bên ngoài, làm ví dụ, nếu bạn có python bạn có thể gửi nội dung của python công cụ json sử dụng:

:%!python -m json.tool 
7

python -m json.tool sắp xếp lại vị trí của các thuộc tính đối tượng JSON, nếu bạn có nút cài đặt, bạn chỉ có thể sử dụng chức năng này:

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 

Mapped để f-j trong vimrc

nmap fj :<C-U>call FormatJSON(v:count)<CR> 

Bạn cũng có thể vượt qua một số không gian cho một tab, 2 là mặc định nếu bạn không chỉ định bất kỳ.

4fj 

vimrc hoàn chỉnh của tôi là ở đây https://github.com/botverse/.dotfiles/blob/master/.vimrc

+0

wow như vậy! mẹo tuyệt vời! –

0

gg=G là những gì bạn cần nếu bạn đang sử dụng vim.

Các vấn đề liên quan