Bagaimana cara saya secara otomatis membuat kawat gigi yang cocok di vim?
Masalah ini tidak sepele, seperti yang akan Anda lihat. Jawaban sederhananya adalah: Gunakan plugin, seperti autoclose atau smartinput . Dengan naif memetakan kembali ([.. tombol akan memberi Anda edgecases dalam beberapa baris, itu sebabnya plugin ini dibuat, dan mengapa mereka biasanya cukup kompleks (jika mereka ada gunanya).
Jadi saya menggunakan UltiSnips untuk memasukkan kurung kurawal
Anda dapat mencoba ini sebagai gantinya (yang berbeda dari saran asli saya):
inoremap ( ()<CR>=UltiSnips_Anon('$1)$0', ')')<CR>
Di mana UltiSnips akan membagi garis (
bukannya memasukkan main
dalam pertandingan. Masalah dengan menggunakan plugin snippet untuk ini adalah mereka (biasanya) tidak mendukung nesting, sehingga mereka akan melupakan posisi lompatan ketika snippet (nested) berikutnya dimasukkan.
Untuk melompat keluar dari pasangan kurung kombinasi Ctrl-jdigunakan.
Anda dapat memetakan ulang Ctrl-juntuk UltiSnips atau plugin yang bertentangan. Jika pemetaan tidak tercantum dalam dokumentasi, Anda dapat menggunakan :map/imap/nmap <key>
untuk menampilkan pemetaan. Jika Anda ingin Ctrl-jmemilih dan melakukan pekerjaan kedua plugin, Anda meminta:
- sesuatu yang jauh lebih maju daripada yang saya kira Anda mungkin berpikir
- sesuatu yang saya curigai tidak Anda inginkan
Pertimbangkan bash loop ini:
while (( ${arr1[i]} < ${arr2[i<CURSOR>]} )); do
[next_snippet_position_marker]
done
Dalam hal ini, Anda harus menekan Ctrl-j5 kali untuk sampai ke badan loop. Menggunakan kawat gigi penutup untuk melompat keluar dari pasangan yang sesuai memberi Anda lebih banyak kontrol di mana Anda ingin kursor bergerak. Anda bisa menerapkan tumpukan untuk melacak pasangan yang dimasukkan dan digunakan Ctrl-juntuk meloncat dan bergerak, tetapi kemudian Anda akan mengalami masalah jika Anda mulai menghapus secara manual kawat gigi tanpa melepaskannya dari tumpukan. Jadi Anda akan mulai memecahkan masalah yang coba diatasi oleh brace-plugins. Ini adalah roda yang sulit untuk diciptakan kembali.
Memperluas hal ini, Anda bisa mendapatkan apa yang awalnya Anda minta, gunakan Ctrl-juntuk melompat keluar dari kawat gigi dan potongan. Jika Anda menggunakan beberapa nilai dummy untuk mewakili posisi snippet dan mendorongnya ke dalam stack selain dari kurung kurawal, dengan pemetaan ulang dinamis Ctrl-juntuk berhubungan dengan penyerahan snipet atau kurung kurawal. Tetapi kemudian Anda perlu menerapkan beberapa heuristik yang cukup canggih untuk mencari tahu keajaiban apa yang harus terjadi, karena Anda pada dasarnya mengambil dua masalah sekaligus, yang saat ini sedang diselesaikan oleh pembuat plugins penyisipan snippet dan brace matching plugins secara terpisah, dan menyelesaikan kembali masalah-masalah ini lagi, di atas solusi mereka , untuk mencapai kenyamanan dan, yah, sulap.
Itu datang untuk mengontrol vs kenyamanan. Saya pikir kontrol akan melayani Anda lebih baik dalam hal ini, yang berarti Anda harus menjaga masalah ini dan plugin terkait dan pemetaan kunci terpisah. Jika Anda masih menginginkan kenyamanan, itu bisa dilakukan, tetapi sulit.
)
, memetakan kembalic-j
untuk yang mungkin berhasil.