Mengapa `cw` dan` ce` melakukan hal yang sama?

15

Ini selalu mengganggu saya tentang perintah wdan Wgerakan — perintah tersebut tampaknya bekerja secara berbeda ketika digunakan dengan cperintah hange daripada yang mereka lakukan saat digunakan sendiri, atau dengan dperintah elete.


Misalnya, dengan kursor pada "q" teks ini:

The quick brown fox jumps over the lazy dog.

mengetikkan dwhasil

The brown fox jumps over the lazy dog.

dan mengetikkan dehasil

The  brown fox jumps over the lazy dog.

(Perhatikan dua spasi antara "The" dan "brown".)


The yank perintah juga memperlakukan wdan eberbeda, seperti dapat ditunjukkan dengan membandingkan yeP:

The quickquick brown fox jumps over the lazy dog.

dan ywP:

The quick quick brown fox jumps over the lazy dog.

Namun, mengetik salah satu ceslow<Esc>atau cwslow<Esc>menghasilkan hal yang sama :

The slow brown fox jumps over the lazy dog.

Apakah ini didokumentasikan di suatu tempat? Apa logika di baliknya dan bagaimana saya bisa memprediksi hasil dari perintah yang digunakan w?

Wildcard
sumber

Jawaban:

18

Ini kasus khusus. Periksa dokumentasi untuk WORD , di bawah "Kasus khusus":

Kasus khusus: "cw" dan "cW" diperlakukan seperti "ce" dan "cE" jika kursor berada di non-blank. Ini karena "cw" ditafsirkan sebagai perubahan-kata, dan kata tidak termasuk spasi putih berikut. {Vi: "cw" ketika pada bagian yang kosong diikuti dengan bagian yang kosong hanya mengubah bagian pertama yang kosong; ini mungkin bug, karena "dw" menghapus semua kekosongan}

Kasus khusus lain: Saat menggunakan gerakan "w" dalam kombinasi dengan operator dan kata terakhir yang dipindahkan adalah di akhir baris, akhir kata itu menjadi akhir dari teks yang dioperasikan, bukan kata pertama di berikutnya baris.

Implementasi Vi asli "e" adalah buggy. Misalnya, perintah "e" akan berhenti pada karakter pertama dari sebuah baris jika baris sebelumnya kosong. Tetapi ketika Anda menggunakan "2e" ini tidak terjadi. Dalam Vim "ee" dan "2e" adalah sama, yang lebih logis. Namun, ini menyebabkan ketidakcocokan kecil antara Vi dan Vim.

fruglemonkey
sumber
1
Neovim 0.2.1 menambahkan bendera 'cpoptions' "_" (garis bawah) yang mengubah perilaku ini. neovim.io/doc/user/options.html#'cpoptions '
Justin M. Keyes
6

Perbedaan antara perilaku gerakan cwvs dwdapat dijelaskan secara sederhana: biasanya jika Anda ingin mengubah kata Anda akan meninggalkan spasi putih mengikutinya, sementara menghapus kata menyarankan Anda ingin spasi putih juga dihapus.

Jika Anda ingin spasi untuk pergi untuk beberapa alasan (saya melakukannya cukup secara teratur tetapi tidak bisa memikirkan contoh) kemudian gunakan awgerak: caw.

dash-tom-bang
sumber