Vim memindahkan kursor satu karakter dalam mode insert tanpa tombol panah

8

Ini mungkin terlihat agak terlalu berlebihan, tetapi saya beralih ke vim dan saya sangat senang dengan alur kerja sekarang. Saya mencoba mendisiplinkan diri sendiri untuk tidak menggunakan tombol panah, karena menjaga tombol alfa sepanjang waktu adalah hal yang sangat besar ketika menulis. Jadi ketika saya harus menavigasi saya keluar dari mode insert, pindah dalam mode normal dan kembali ke mode insert.

Ada pengecualian di mana ini sebenarnya lebih mengganggu: Saya gunakan clang completedengan snippet dan super tabmana yang bagus. Kecuali setiap kali saya mendapatkan fungsi otomatis selesai setelah saya mengisi parameter saya ditinggalkan dengan kursor sebelum )jadi untuk melanjutkan saya harus memindahkan kursor satu karakter ke kanan. Seperti yang dapat Anda bayangkan, ini sangat sering terjadi .

Satu-satunya pilihan yang saya miliki (sejauh yang saya tahu) adalah: Esclaatau , dan saya tidak senang dengan keduanya. Yang pertama membuat saya menekan 3 tombol hanya untuk gerakan kursor 1 karakter sederhana, yang kedua membuat saya memindahkan tangan saya ke tombol panah. Opsi ketiga adalah memetakan CTRL-Latau bertiga .

Jadi apa cara terbaik untuk melakukan ini?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| menunjukkan posisi kursor

bolov
sumber
Dengan masalah yang sama, saya akhirnya meretas skrip penyelesaian untuk membuatnya tidak menutup gema )jika setidaknya ada satu argumen dalam fungsi. Jadi saya mengetiknya dengan tangan. Jauh lebih bermanfaat sekarang.
Dmitry Frank
Apa yang terjadi ketika Anda mengetik, )saya yakin itu melompati tanpa benar-benar memasukkan. (Saya tidak menggunakan plugin ini)
FDinoff
@FDinoff tidak, itu hanya menyisipkan lain)
bolov
1
@bolov itu mengecewakan. Anda mungkin dapat mengekstrak kode yang melakukan itu dari pasangan-otomatis . Saya tidak tahu jika plugin akan konflik mereka mungkin. Opsi lainnya adalah menggunakan <C-O>luntuk keluar ke mode normal untuk 1 perintah mode normal.
FDinoff

Jawaban:

5

Peta )untuk melewati yang ada )jika tanda kurung tutup

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Diambil dari: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Jawaban Lama

:h i_CTRL-O jalankan satu perintah, kembali ke mode Sisipkan.

Ctrl-ol akan memindahkan Anda satu karakter ke kanan lalu mengembalikan Anda ke mode penyisipan.

Atau beberapa plugin braket memungkinkan Anda untuk mengetik braket penutup )dan mereka akan menimpa yang sudah ada.

Brett Y
sumber
1
ini tidak berfungsi jika )karakter terakhir di telepon (dan ini sering terjadi saat Anda menulis kode). CTRL-O aNamun berhasil. Jadi saya kira kami menyimpan satu kunci. :)
bolov
True del )hanya dua karakter dan akan selalu menempatkan Anda setelah tanda kurung tutup.
Brett Y
melewatkan ')' bekerja seperti pesona, terima kasih
bolov
0

Ketik yang berikut untuk menemukan tombol kontrol yang digunakan dalam mode sisipkan.

:help insert-index

ctrl-b tidak digunakan, tetapi Anda mungkin ingin mengorbankan beberapa kunci lainnya.

imap <c-b> <right>

Ini berfungsi untuk memindahkan kursor ke kanan satu karakter. Atau memetakan beberapa karakter ganda.

imap jj <right>
sapu terbang
sumber