Saya menggunakan spacemacs
tetapi mungkin pengetahuan emacs yang diperlukan di sini.
Saya memiliki file JSON dengan satu baris panjang, misalkan JSON ini dari json.org/example:
{"menu": {"id": "file", "value": "File", "popup": {"menuitem": [{"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"}]}}}
Saya ingin emacs untuk mengaktifkan kembali ini, yang berarti bagi saya tidak mengubah karakter garis paling kiri ke tingkat lekukan yang tepat, tetapi memecah garis dalam beberapa baris.
Jika saya menggunakan spacemacs/indent-region-or-buffer
( SPC j =
) maka teks tidak berubah sama sekali.
Bagaimana saya bisa meminta dari emacs untuk benar-benar memutus garis panjang ini dan reindent untuk mendapatkan sesuatu seperti ini:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
Saya tidak tertarik dengan jawaban khusus JSON, misalnya saya percaya bahwa IntelliJ melakukan itu untuk bahasa apa pun yang didukungnya (java, json ...). Saya pikir itu dapat dicapai karena emacs bahasa apa pun memiliki mode utama, atau katakanlah yang paling populer.
EDIT Saya menemukan M-x json-reformat-region
bahwa spacemacs
kapal dengan dan bekerja, tapi ya, saya ingin itu untuk bahasa apa pun dan dengan selalu pintasan yang sama, berdasarkan mode utama ...
EDIT2 Ok jadi kesimpulan saya adalah bahwa ini diterapkan untuk berbagai bahasa, setidaknya JSON & lisp, mungkin orang lain, dan itu akan lebih mudah untuk lebih banyak lagi (XML / XHTML, go yang telah go-fmt dan juga menggunakan dentang). Namun tidak ada nama fungsi generik yang akan melakukannya untuk semua bahasa. Ada ruang di sini untuk mengimplementasikannya dalam spacemacs
lapisan untuk berbagai bahasa ... Saya tidak menemukan implementasi X / HTML, yang sedikit mengejutkan saya.
sumber
web-beautiful.el
. Ini adalah yang terbaik yang saya temukan, tetapi itu tergantung pada node.js.Jawaban:
Sepertinya Anda membutuhkan
fill-region
fungsi lebih dari indentasi.M-x fill-region
.M-x indent-region
.Namun, itu tidak akan menyisipkan baris baru pada titik yang tepat seperti yang ditunjukkan pada contoh Anda. Ini hanya akan membuat garis pas di kolom isian.
sumber
{
dalam{"menu":
tetapi Anda memiliki satu setelah{
dalam{"id":
. Saya tidak tahu JSON dan jawaban terformat Anda mungkin memang memiliki pola yang saya lewatkan. Tetapi jika Anda dapat memperbarui pertanyaan Anda dengan seperangkat aturan untuk memasukkan baris baru itu, maka seseorang dapat menemukan jawaban yang Anda inginkan.gofmt
tetapi untuk bahasa apa pun) - gofmt.comjson.el
paket menyediakanjson-pretty-print-buffer
. Inilah yang dihasilkannya sebagai contoh Anda:Sepertinya cukup baik untukku.
sumber
json-pretty-print
danjson-pretty-print-buffer
(spesifikasi yang sama denganjson-reformat-region
) dibundel.". Tapi saya pikir emacs dapat memiliki fungsi yang akan bekerja untuk semua bahasa (khusus untuk setiap bahasa mode utama populer), yang ternyata, tidak.Menurut tip di sini , Anda dapat menggunakan perintah eksternal untuk memformat wilayah di file Json Anda:
Anda dapat dengan mudah mengembangkannya untuk memformat seluruh buffer:
Emacs tidak memiliki alat pemformatan untuk bahasa pemrograman ( kecuali untuk Lisp ), hanya perintah indentasi.
sumber
M-x json-reformat-region
bahwaspacemacs
kapal dengan dan bekerja, tapi ya, saya ingin itu untuk bahasa apa pun dan dengan selalu pintasan yang sama, berdasarkan mode utama ... Tampaknya ini tidak didukung, terlalu buruk ...clang-format
.Untuk skenario khusus ini
json-pretty-print
akan melakukan prettify pada benjolan yang disorot dari json.sumber
BTW, untuk mode utama menggunakan SMIE sebagai mesin indentasi mereka, ada beberapa bagian yang Anda perlukan untuk itu dalam bentuk
auto-fill-mode
dukungan. Saya pikirfill-paragraph
ataufill-region
tidak akan melakukan pekerjaan dengan baik, tetapi jika Anda meletakkan kode Anda ke satu baris, kemudian pergi ke akhir baris itu dan lakukanM-: (smie-auto-fill)
itu akan memberikan hasil yang waras (mungkin tidak sempurna oleh peregangan panjang, tho).sumber