Batalkan dalam mode sisipkan


23

Apakah ada perintah untuk membatalkan operasi terakhir yang dilakukan saat dalam mode insert?

Saya baru saja menempelkan teks dari register yang salah menggunakan <C-r>, dan saya punya dua opsi:

  1. Hapus dengan tangan apa yang baru saja saya tempel dan mulai lagi dari awal.
  2. Beralih ke mode normal, tekan udan kehilangan teks yang saya ketik sebelum memukul <C-r>.

Apakah ada cara yang lebih baik?

Jawaban:


16

Vim menawarkan kemampuan terbatas untuk menentukan lingkup perubahan yang tidak dapat dibatalkan dengan Ctrl-G uperintah, yang memecah urutan pembatalan. Lihat

:help i_CTRL-G_u

Dalam kasus Anda, solusinya adalah memetakan kembali <C-R>seperti ini:

:inoremap <C-R> <C-G>u<C-R>

Kemudian mengetik <C-O>uakan membatalkan perubahan yang dilakukan sejak Anda mengetik <C-R>. Lihat

:help i_CTRL-O

1
Itu brilian, saya tidak tahu tentang perintah ini. Ada cukup lama penundaan antara mengetik <C-O>udan melihat hasilnya di layar (sekitar 4 detik), ada ide tentang bagaimana saya bisa menyingkirkan itu?
zool

Saya perhatikan itu juga. Saya tidak tahu; Saya akan mencoba mencari tahu.
garyjohn

Hai, apakah mungkin Anda maksudkan <CR> (carriage return) daripada <CR> (ctrl-r)?
Derwent

Tidak. Pertanyaan asli terkait dengan perilaku <CR>, jadi itulah yang digunakan pemetaan. Namun, Anda bisa mengganti <CR> dengan <CR> dalam pemetaan itu agar urutan undo terganggu oleh <CR> sebagai gantinya. Lebih banyak contoh dapat ditemukan di :help i_CTRL-G_u.
garyjohn

6

Dari mode penyisipan:

  1. Jika teks yang Anda tempel lebih kecil dari satu baris (yang menyiratkan poin kedua Anda), cukup tekan <C-u>untuk menghapus semua karakter sebelum kursor di baris saat ini.

  2. Jika teks disisipkan lebih dari satu baris, solusi 2 Anda akan bekerja lebih baik, diadaptasi sebagai berikut: <C-o>u.

Kedua poin di atas akan mulai dan tetap - atau selesai - dalam mode insert; mereka sebenarnya sama dengan solusi yang Anda usulkan, hanya dibuat lebih pendek :)


6

Anda bisa mencoba <C-w>(menghapus kata ke kiri) atau <C-u>(menghapus karakter sebelum kursor saat ditekan sekali, menghapus linebreak saat ditekan kedua kalinya). Lihat :help i_CTRL-Wdan :help i_CTRL-U.

Jika Anda menempel banyak dari register, tentu saja ini lebih cepat untuk membatalkan perubahan Anda, Anda dapat menggunakan mode insert-normal- <C-o>for untuk itu (jalankan satu perintah mode normal kemudian kembali ke mode insert).

Secara umum akan sangat membantu untuk memotong editan Anda menjadi potongan-potongan kecil dengan sering kembali ke mode normal, sehingga Anda memiliki kemungkinan undo berbutir halus.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.