Apakah ada alasan historis khusus untuk ini?
Latar Belakang - (Anda dapat melewati bagian ini jika Anda sudah mengerti pertanyaannya.)
Seperti yang vi
diketahui pengguna tingkat menengah / lanjutan , y
adalah perintah "yank" - perintah itu menarik (menyalin) teks yang ditentukan oleh perintah gerakan berikut. * Dengan demikian ye
menarik ke akhir kata, y0
menarik dari posisi kursor ke awal baris, y_
menarik seluruh garis saat ini, y$
menarik dari posisi kursor ke akhir garis saat ini, dll.
Perintah d
(hapus) dan perintah c
(ubah) dapat digunakan dengan semua gerakan ini juga.
dd
adalah sinonim untuk d_
dan menghapus seluruh baris saat ini. Demikian juga, cc
adalah sinonim untuk c_
dan akan mengubah baris saat ini (yaitu akan menghapus semua teks dan menempatkan Anda dalam mode penyisipan di awal baris). **
Perintah "yank" mengikuti konvensi ini; yy
akan menarik seluruh baris saat ini seperti y_
.
Ada set sinonim lain: D
adalah sinonim untuk d$
dan akan menghapus dari posisi kursor ke akhir baris. C
adalah sinonim untuk c$
dan akan mengubah teks dari posisi kursor ke akhir baris, menempatkan Anda dalam mode sisipkan untuk mengetik teks baru.
Namun, Y
adalah sinonim lain untuk yy
atau y_
dan akan menarik seluruh baris , bukan hanya dari kursor ke akhir baris seperti yang Anda harapkan dari C
dan D
pola.
Saya mengerti bahwa dalam Vim disimpan dengan cara ini untuk menjaga kompatibilitas dengan vi
, sebagaimana disebutkan dalam bantuan Vim di bawah :help Y
:
Jika Anda suka "Y" bekerja dari kursor ke akhir baris (yang lebih logis, tetapi tidak kompatibel dengan Vi) gunakan ": map Y y $".
Jadi ini adalah peninggalan dari vi
. Baik.
Tapi, mengapa perintah itu dirancang seperti itu di tempat pertama? Apakah ada logika untuk itu?
* Secara khusus itu menempatkan teks dalam register 0 dan menunjuk register yang tidak disebutkan namanya pada register 0.
** Meskipun tidak relevan dengan pertanyaan saya, S
sinonim lain untuk cc
atau c_
.
Jawaban:
Saya menemukan sebuah makalah "Pengantar Editing Layar dengan Vi" oleh William Joy (pencipta vi) dan Mark Horton (vi pengelola sejak 1979).
Dari kertas jelas bahwa perilaku default Y bukan kesalahan, tetapi fitur yang diinginkan. Di bagian "Mengatur ulang dan menggandakan teks" mereka menyebutkan ini:
Kemudian dalam daftar perintah (lihat lampiran dalam versi pdf ), deskripsi untuk Y adalah ini:
Dengan cara ini saya yakin Y adalah fitur dan bukan bug.
Adapun inkonsistensi dengan
D
danC
- Saya juga punya penjelasan logis. Jika Anda mencoba berpikir sebagai penulis editor teks daripada keinginan utama Anda adalah membuat teks baru dan tidak menghapusnya. Mereka (penulis editor teks) ingin penggunanya menulis lebih banyak teks dan semakin banyak ...Jadi untuk perintah gula sintaksis (dan
Y
,D
danC
merupakan jenis gula sintaksis karena mereka menduplikasi fitur yang sudah ada) mereka memilih operasi yang menambahkan sebanyak mungkin teks (Y
menggandakan seluruh baris) atau menghapus teks sesedikit mungkin (D
danC
menghapus hingga akhir baris dan bukan seluruh baris).sumber
YP
; itu cepat dan mudah diketik. Saya yakin. ;)Y
adalah perintah menarik versi vi pertama (ex-1.1, 1 Januari 1978). Versi ini tidak memilikiyy
cammand. ex-2.2 (6 Mei 1979) memang memiliki keduanyayy
danY
. Jadi sebenarnyayy
adalah sinonim untukY
(Y
sebelumyy
).sumber
Y
tidak mengikuti logika yang sama dengan perintah lain karena itu mendahului hal itu kemudian retconned sebagai singkatan untuk.