Ketika saya menyalin kode dari file lain, pemformatan kacau, seperti ini:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Bagaimana saya bisa mengatur otomatis kode ini dalam vim?
Ketika saya menyalin kode dari file lain, pemformatan kacau, seperti ini:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Bagaimana saya bisa mengatur otomatis kode ini dalam vim?
Jawaban:
Coba penekanan tombol berikut:
gg=G
Penjelasan: gg
pergi ke bagian atas file, =
adalah perintah untuk memperbaiki lekukan dan G
menyuruhnya untuk melakukan operasi hingga akhir file.
Saya suka menggunakan program Artistic Style. Menurut situs web mereka :
Gaya Artistik adalah kode sumber indenter, formatter, dan beautifier untuk bahasa pemrograman C, C ++, C # dan Java.
Ini berjalan di Window, Linux dan Mac. Ini akan melakukan hal-hal seperti indentasi, mengganti tab dengan spasi atau sebaliknya, menempatkan ruang di sekitar operasi sesuka Anda (mengkonversi if(x<2)
ke jika ( x<2 )
jika itu yang Anda suka), meletakkan kawat gigi pada baris yang sama dengan definisi fungsi, atau memindahkannya ke baris di bawah, dll. Semua opsi dikontrol oleh parameter baris perintah.
Untuk menggunakannya dalam vim, cukup atur opsi formatprg ke sana, dan kemudian gunakan perintah gq. Jadi, misalnya, saya miliki di .vimrc saya:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
sehingga setiap kali saya membuka file .cpp, formatprg diatur dengan opsi yang saya suka. Lalu, saya bisa mengetikkan gg untuk pergi ke bagian atas file, dan gqGmemformat seluruh file sesuai dengan standar saya. Jika saya hanya perlu memformat ulang fungsi tunggal, saya bisa pergi ke atas fungsi, lalu ketik gq][dan itu akan memformat ulang fungsi itu saja.
Opsi yang saya miliki untuk astyle,, -T4pb
hanyalah preferensi saya. Anda dapat melihat dokumen mereka , dan mengubah opsi untuk memformat kode sesuka Anda.
Ini demo. Sebelum astyle:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Setelah astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Semoga itu bisa membantu.
Plugin vim-autoformat memungkinkan Anda memformat buffer Anda (atau pilihan buffer) dengan satu perintah: https://github.com/Chiel92/vim-autoformat . Ini menggunakan program format eksternal untuk itu, dengan fungsi indentasi fallback to vim.
Saya menemukan itu clang-format
bekerja dengan baik.
Ada beberapa contoh ikatan kunci dalam dokumentasi dentang
Saya lebih suka menggunakan equalprg
binding di vim. Hal ini memungkinkan Anda untuk memohon clang-format
dengan G=gg
atau lainnya =
pilihan indent.
Masukkan saja berikut ini di file .vimrc Anda:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Saya suka indent
seperti yang disebutkan di atas, tetapi paling sering saya ingin memformat hanya sebagian kecil dari file yang sedang saya kerjakan. Karena indent
dapat mengambil kode dari stdin, ini sangat sederhana:
:!indent
.astyle
Dibutuhkan stdin juga, sehingga Anda dapat menggunakan trik yang sama di sana.
Saya ingin menambahkan, bahwa untuk mencegahnya tidak berantakan, Anda dapat mengetik :set paste
sebelum menempel. Setelah menempel, Anda dapat mengetik :set nopaste
untuk hal-hal seperti js-beautify dan indentasi untuk bekerja lagi.
:set paste!
ini, yang mengubah nilai tempel alih-alih mengaturnya. Ini membuatnya lebih mudah untuk dimatikan karena Anda dapat dengan mudah menggulir kembali beberapa perintah dan tekan enter.