Mempercepat kecepatan pada <Esc> O (Sisipkan ke Normal untuk Menyisipkan baris baru di atas kursor)

16

Seringkali ketika saya dalam mode Insert, saya akan menekan Escuntuk masuk ke mode Normal, dan kemudian segera tekan Ountuk memulai baris baru di atas kursor dan masuk ke mode Insert di sana.

Tetapi ketika saya melakukan itu, ada penundaan 1 detik setelah saya menekan Osebelum ada respons yang terlihat. Selanjutnya jika saya mulai mengetik teks baru selama yang delay 1 detik, jika teks baru dimulai dengan salah satu set karakter tertentu (misalnya j, k, m, n, o), saya berakhir di tengah-tengah beberapa operasi lain yang saya tidak berniat, sering membuat berantakan, pada titik mana saya harus berhenti dan meraba-raba dengan membatalkan dan mengulang sampai saya cukup yakin saya telah memperbaiki kerusakan.

Untuk menghindari ketidaknyamanan itu, saya memiliki kebiasaan berhenti selama satu detik setelah setiap kali saya mengetik O. Tapi ini memperlambat saya dan mencegah saya menjadi iblis kecepatan vim seperti yang seharusnya.

Apa yang menyebabkan ini? Apakah ada perbaikan atau penyelesaiannya?

Don Hatch
sumber

Jawaban:

15

Ini hanya terjadi di terminal, tetapi tidak di GVIM, kan? Alasannya adalah bahwa Vim tidak dapat membedakan antara kunci jenis individu dan urutan Escape ANSI dimulai dengan kunci yang sama (yaitu ^[O..., <Esc>diikuti oleh Odalam kasus Anda).

Anda dapat membaca tentang semua kompleksitas yang mendasarinya di :help 'timeout'(dan opsi berikut). Di sana Anda juga menemukan konfigurasi yang disarankan yang mengatasi masalah:

:set timeout timeoutlen=1000 ttimeoutlen=100
Ingo Karkat
sumber
3
Anda juga bisa menggunakan set noesckeys; ini memiliki efek samping menonaktifkan tombol panah (dan mungkin beberapa tombol lainnya?) dalam mode Sisipkan, jadi mungkin tidak untuk semua orang.
Martin Tournoij
2
@Carpetsmoker Mengenai "atur noesckeys" ... yang berfungsi, tetapi hanya jika dalam mode Sisipkan. Saya tahu saya katakan saya dalam mode Insert untuk memulai; namun saya juga sering melakukan <Esc> O mulai dari mode Normal (terutama ketika saya tidak 100% yakin apakah saya memulai mode Insert atau Normal) jadi saya ingin sesuatu yang berfungsi dalam case itu juga.
Don Hatch
1
@ DonHatch Anda dapat menggunakan :nnoremap ^[O O, di mana ^[dimasukkan dengan menekan <C-v><Esc>(juga dapat muncul sebagai <1b>).
Martin Tournoij
5

Sebagai solusinya, alih-alih ESCO, gunakan Control+ OO. Tanda Control+ Omenempatkan Anda dalam mode normal untuk satu perintah, lalu mengembalikan Anda untuk memasukkan mode setelah selesai.

Ross Presser
sumber
1

Bagaimana tentang:

Control+C O

Ada beberapa kehalusan saat menggunakan Control+ Cyang harus Anda ketahui.

mikeazo
sumber