Saya suka fitur indentasi pintar dari Vim, ini memungkinkan saya untuk membuat blok kode yang terindentasi dengan baik.
Saya secara teratur menyalin / menempel kode ke buffer, tetapi kode itu sering diformat dengan buruk.
Apa yang ideal adalah "memproses ulang" kode melalui sistem indentasi pintar.
Apakah hal seperti itu mungkin?
Misalnya, bagaimana Anda 'memperbaiki' kode berikut (ekstrak dari blok yang lebih besar - Saya tidak ingin memperbaiki setiap baris secara manual ...):
else
{
m[c] = 5;
Finished = true;
std::cout<<"(ID,R,E)"<<"-->"<<"("<<g[c]<<","<<r[c]<<","<<E1 <<")"<< std::endl;
std::cout << "\n"<<"finish-->" << r[c] << "\t" <<"E1-->"<< E1 <<"\n" ;
}
}
indentation
ide
rolfl
sumber
sumber
Jawaban:
Saya melakukan ini salah satu dari dua cara.
Indent pasta yang disesuaikan
Pertama, jika kode dalam buffer diformat, tetapi pada tingkat lekukan yang berbeda, saya menggunakan
]p
alih-alihp
, yang menempelkan kode seperti apa adanya, tetapi dengan lekukan yang digeser sedemikian rupa sehingga baris pertama yang dilekatkan memiliki kedalaman yang sama dengan baris I sedang.Sumber EG disalin ke buffer
EG hasil menempelkannya dengan
]p
vim menempatkan sementara pada tingkat indentasi yang sama dengan
int i
. Ini cepat, tetapi hanya berfungsi jika kode yang disalin dimasukkan dengan benar di dalamnya.Memformat ulang setelah menempel
The
=
operator dalam memformat vim kode berdasarkan aturan memformat dikonfigurasi. Untuk cuplikan singkat tempelan, saya akan masuk ke mode visual denganv
, pilih garis yang baru saja saya tempel dan kemudian tekan=
untuk memformat ulang mereka.Untuk pasta yang lebih besar, saya mengambil keuntungan dari fakta bahwa kursor mengarah ke baris yang disisipkan pertama, dan vim itu mengatakan sesuatu seperti "84 lebih banyak baris". Saya kemudian bisa masuk
84==
untuk mem-reflow 84 baris tersebut (tentu saja, gantikan 84 dengan jumlah baris yang Anda tempelkan).Referensi
:help ]p
untuk indent paste yang disesuaikan:help =
penutup={motion}
,[count]==
dan{Visual}=
untuk memfilter melalui aturan indentasi khusus atau bawaansumber
The
=
perintah dapat digunakan untuk reindent.Seperti kebanyakan perintah mode normal, ini dapat diterapkan ke gerakan, sehingga Anda dapat mengaktifkan kembali kode yang hanya ditempelkan =']. Ini reindents dari posisi kursor saat ini ke
']
tanda, yang merupakan baris terakhir dari paste.=
juga dapat digunakan dari mode visual.Perintah lain yang bermanfaat adalah ]p, yang menempel pada level indent yang sama dengan baris saat ini. Ini dapat membantu menempelkan teks dengan indentasi yang benar, meskipun pada kedalaman indentasi yang berbeda, sesuai dengan teks di sekitarnya.
sumber
Menggunakan =ap (mnemonic adalah 'memformat paragraf') akan memiliki upaya vim untuk mengatur otomatis paragraf saat ini.
Jika Anda ingin memperhatikan dengan hati-hati apa yang berpotensi vapAnda format ulang, Anda mungkin merasa lebih waras dan lebih cepat digunakan untuk memilih secara visual paragraf saat ini (memberi Anda indikasi visual tentang apa yang sedang diformat ulang), diikuti oleh =. Saya menemukan ini berguna dalam file di mana saya tahu bahwa vim akan memformat ulang secara tidak benar, dan saya tidak ingin salah memformat baris lain.
sumber
Untuk memasang kembali file yang sudah ada di buffer, gunakan
gg=G
: Lihat Memperbaiki IndentasiUntuk pengindeksan ulang sebagian file, berbagai batasan dapat diterapkan pada
=
filter (misalnya,==
memperbaiki hanya baris saat ini).Agar indentasi tidak berubah saat menempelkan teks
:set paste
sebelum Anda dapat menempelkan teks ke dalam buffer, ini akan mencegah vim dari teks indentasi otomatis yang baru saja Anda tempel. Setelah menempelkan barang, Anda dapat kembali menggunakanset :nopaste
setelah selesai. Lihat vimdoc di sini .Jika Anda sering menempelkan barang, sebaiknya gunakan tip ini di VimWiki dan atur kunci untuk mode tempel "tempel" dengan menambahkan baris ini ke
.vimrc
:Anda kemudian dapat menekan
<F2>
untuk beralih mode tempel. vim akan menampilkan kata "PASTE" di baris status ketika mode tempel aktif.sumber
gg=G
untuk meng-reindent seluruh file.gg=G
lalu lihat bagian-bagian yangvim
salah.astyle
ketika Anda menyimpan buffer. Lihat pertanyaan ini di SO untuk detailnya.Untuk memasang kembali seluruh blok dari blok yang dikuatkan atau dikurung secara otomatis, tempatkan kursor Anda pada baris yang sama di mana adalah kurung, dan coba =%. Untuk mengubah lebar shift Anda, gunakan misalnya
:set sw=2
.Jika ini tidak bekerja seperti yang diharapkan, untuk mengurangi indentasi manual ( outdent ), coba <%dan ulangi dengan .(jika perlu). Gunakan >%untuk sebaliknya.
Begitu:
menjadi:
Untuk kode tertentu, untuk indentasi ulang satu baris atau beberapa baris secara otomatis, coba:
Untuk menambah / mengurangi indentasi secara manual untuk satu baris atau beberapa baris, coba:
Anda juga dapat melakukan lekukan dalam mode visual ( v) dengan memilih teks dan menekan =(indentasi otomatis), <(menghapus indentasi) atau >(indentasi).
Trik lain adalah dengan lekukan yang benar dari seluruh file oleh: gg=G.
Jika Anda memiliki tab alih-alih spasi, gunakan:
:retab
yang akan mengganti semua Tab dengan spasi (Lihat: Bagaimana cara mengganti tab dengan spasi? ).Untuk metode eksternal, Anda dapat mencoba:
pythonTidy untuk memformat ulang kode Python, misalnya:
Terkait:
sumber
Saya baru-baru ini menginstal vim-pasta ( https://github.com/sickill/vim-pasta ), dan itu tampaknya meningkatkan lekukan kode ketika saya tempel. README juga memiliki beberapa diskusi yang bagus tentang berbagai strategi menempel kode.
sumber
Sudah ada banyak hal yang tercakup dalam jawaban yang ada. Saya hanya ingin menambahkan satu pemetaan yang sering saya gunakan untuk lekukan.
Saya telah melihat beberapa vimrc dengan ini dipetakan ke ===.
Either way ini adalah pemetaan yang bagus untuk dimiliki dan saya menggunakan ini hampir setiap saat terutama ketika menempelkan kode yang disalin dari tempat lain.
Atau bahkan lebih baik memasukkan ini ke dalam
autocmd
sehingga Vim indentasi itu tepat sebelum Anda menulis perubahan ke disk.sumber