Bisakah saya membuat vim mengubah perilaku kursornya?

11

Saya telah menggunakan vim selama beberapa tahun sebagai editor sekunder tetapi karena berbagai alasan, saya semakin sering menggunakannya bahkan ketika editor utama saya tersedia. Satu masalah yang selalu mengganggu saya vim, dan yang membuat saya lebih sering menggunakannya, adalah cara menangani penempatan kursor. Kursor hanya bisa berada pada karakter, bukan di antara karakter, seperti halnya editor yang dibuat sejak 1984.

Untuk satu contoh saja mengapa ini menjadi masalah, jika saya ingin menghapus kata terakhir pada sebuah baris, saya menekan $untuk pergi ke akhir baris, dan kemudian dbmenghapus mundur. Ini meninggalkan karakter untuk dihapus, karena $tidak benar - benar pergi ke akhir baris, itu pergi ke karakter terakhir dari baris , dan dbhanya menghapus apa yang ada sebelum karakter saat ini. Masalahnya bukan bahwa saya harus mengetik karakter tambahan, itu adalah pemikiran ekstra yang terlibat dalam melakukan apa yang seharusnya sederhana, yang mengalihkan perhatian saya dari apa yang sebenarnya saya coba capai.

Tampaknya bagi saya bahwa penempatan kursor ide yang lebih modern dalam segala hal lebih unggul, dan saya ingin beralih vimuntuk menggunakan pendekatan itu. Saya yakin beberapa vimpenggemar hard-core tidak akan setuju dengan pandangan saya tentang hal itu, tetapi karena salah satu argumen standar untuk vimsuperioritas adalah konfigurasi yang tidak terbatas:

  • dapatkah itu dikirimkan dalam kasus ini?
  • Dapat vimdibuat untuk menempatkan kursor di antara karakter?
iconoclast
sumber
2
Kedengarannya seperti Anda mencari Insertmode atau melewatkan titik normalmode. Saya akan melakukan $dawatau $bdwmenghapus kata terakhir pada baris dalam mode normal. Dalam Insertmode yang akan saya lakukan A<Ctrl-w>.
jw013
3
Sebagai catatan, sebagai seseorang yang takut dengan ide dunia bawah tanah "antar karakter", urutan kunci yang benar untuk menghapus kata terakhir pada baris saat ini adalah$bD
Alan Curry
1
Menggunakan mouse tidaklah ideal, tetapi ketidakefisienan yang signifikan muncul ketika Anda harus berhenti dan memikirkan bagaimana melakukan apa yang ingin Anda lakukan. Hal nyata yang berharga bukanlah sedetik di sana-sini, tetapi fokus . Ketika Anda kehilangan fokus, Anda kehilangan lebih dari beberapa detik.
iconoclast
2
Dari komentar sejauh ini terdengar seperti jawaban untuk pertanyaan adalah "Tidak, model pergerakan kursor ini tertanam dalam desain vim dan tidak dapat diubah." Apakah itu benar?
iconoclast
2
@iconoclast Itu kesimpulan saya juga. Sejauh yang saya tahu, tidak mungkin dalam vi atau vim untuk memperlakukan semua karakter pada garis secara seragam, selalu ada pengecualian untuk karakter pertama atau terakhir.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

5

Anda bisa :set virtualedit+=onemore, yang memungkinkan Anda untuk melewati karakter terakhir. Sayangnya untuk Anda, $masih masuk ke karakter terakhir; Anda harus mengarahkan kursor untuk melewatinya. Di sisi lain, Anda dapat menggunakan g$, yang biasanya pergi ke karakter terakhir dari garis layar pada garis yang membungkus; dalam onemoremode ini juga hanya melewati karakter terakhir dari garis yang tidak terbungkus (atau baris layar terakhir dari garis yang dibungkus).

:h 'virtualedit' mengatakan opsi ini dapat mengacaukan skrip, tetapi saya tidak tahu seberapa besar risiko yang ada dalam kenyataan.

echristopherson
sumber