Dalam vim, ketika saya menekan ESC
untuk kembali ke mode perintah, kursor memindahkan satu karakter ke kiri. Ini bukan yang saya harapkan, sesekali saya langsung menekan l
untuk kembali ke tempat itu, mungkin untuk menghapus karakter.
Apakah ada alasan untuk perilaku ini? Apakah ini nyaman untuk pola penggunaan yang saya lewatkan?
Jawaban:
Dalam mode penyisipan, kursor berada di antara karakter, atau sebelum karakter pertama atau setelah karakter terakhir. Dalam mode normal, kursor melebihi karakter (baris baru bukan karakter untuk tujuan ini). Ini agak tidak biasa: kebanyakan editor selalu menempatkan kursor di antara karakter, dan memiliki sebagian besar perintah bertindak pada karakter setelah (tidak, secara tegas, di bawah ) kursor. Ini mungkin sebagian disebabkan oleh fakta bahwa sebelum GUI, terminal teks selalu menunjukkan kursor pada karakter (garis bawah atau blok, mungkin berkedip). Abstraksi ini gagal dalam mode penyisipan karena itu memerlukan satu posisi lagi (posting vs pagar).
Beralih di antara mode harus menggerakkan kursor dengan setengah karakter, sehingga untuk berbicara. The
i
perintah bergerak ke kiri, untuk menempatkan kursor sebelum karakter itu lebih. Thea
perintah bergerak tepat. Keluar dari mode penyisipan (dengan menekan Esc) menggerakkan kursor ke kiri jika memungkinkan (jika berada di awal baris, alih-alih dipindahkan).Saya kira Escperilaku semacam itu masuk akal. Seringkali, Anda mengetik di akhir baris, dan Eschanya ada yang tersisa. Jadi perilaku umum adalah perilaku yang paling umum.
Pikirkan karakter di bawah kursor sebagai karakter terakhir yang menarik, dan perintah insert sebagai
a
. Anda dapat mengulangi a Esctanpa menggerakkan kursor, kecuali bahwa Anda akan ditabrak satu posisi dengan benar jika Anda mulai dari awal baris yang tidak kosong.sumber
Secara visual, lebih masuk akal di gvim:
Saat mengedit, kursor Anda berada di antara karakter:
Ketika dalam mode normal, itu berada di atas karakter terakhir:
Jadi itu tidak benar-benar kembali karakter, hanya dari menjadi antara
r
dans
menjadi dir
sumber
m
harus tetap disorot setelah kembali ke mode normal ...Perilaku ini dapat diedit seperti dijawab di sini , tetapi berhentilah dan pikirkan tentang apa yang terjadi sesaat. Saat Anda berada dalam mode sisipkan, Anda sebenarnya bukan lebih dari satu karakter tetapi antara mereka. Ketika Anda memasukkan sesuatu, kursor melompat ke ujung apa yang Anda masukkan sehingga hal berikutnya yang dimasukkan akan setelah itu. Sekarang pikirkan jika Anda baru saja mengetik surat, maka ingin melakukan sesuatu untuk itu. Memukul Escakan menempatkan kursor pilih langsung di atas karakter terakhir yang Anda masukkan. Jika tidak melakukan ini, itu sebenarnya akan agak canggung.
Situasi yang mungkin Anda pikirkan adalah ketika Anda berada di mode insert bergerak seolah-olah Anda mode normal dan kemudian beralih. Dalam hal ini kursor tampaknya mengembalikan satu karakter, tetapi jika Anda berpikir seperti itu itu menunjukkan bahwa Anda berada dalam mode insert dan hal terakhir yang Anda lakukan adalah TIDAK memasukkan. Mungkin Anda harus menghabiskan lebih banyak waktu dalam mode normal?
sumber
i
dan berulangESC
?i
diikuti olehESC
adalah fungsii
dan sepenuhnya independen dariESC
; khususnya, ketika Anda menekani
Anda meminta vim untuk memasukkan karakter, yang menurut definisi berarti "memasukkan karakter sebelum yang saya aktifkan", sebagai lawan daria
yang "menambahkan karakter setelah yang satu ini".Ketik Alt+ Luntuk kembali ke mode perintah.
Itu tidak memerlukan remapping atau perubahan konfigurasi vim. Ini berfungsi karena pada kebanyakan emulator terminal Alt+ KEYmengirimkan Escdiikuti oleh KEY(pada xterm Anda mungkin perlu menambahkan
Xterm*metaSendsEscape: true
baris ke file ~ / .Xdefaults Anda). Perilaku itu memungkinkan Anda untuk bahkan "membuat" kombinasi mode penyisipan lain yang berfungsi langsung di luar kotak - seperti Alt+ Shingga Backspace.By the way, memiliki kursor di atas karakter yang baru saja Anda tulis bisa sangat merepotkan. Misalnya, Escdwtidak akan menghapus kata setelah teks yang baru saja Anda masukkan.
sumber
Esc d e
untuk menghapus kata di depan. Saya kembali ke perilaku default karena saya merasa itu mengubah perilaku lain yang sudah dikodekan di kepala saya.Inilah solusi saya.
Ini adalah versi yang lebih singkat dari solusi yang ditawarkan di halaman wikia tentang ini .
sumber