Mengapa Y sinonim untuk yy alih-alih y $?

28

Apakah ada alasan historis khusus untuk ini?


Latar Belakang - (Anda dapat melewati bagian ini jika Anda sudah mengerti pertanyaannya.)

Seperti yang vidiketahui pengguna tingkat menengah / lanjutan , yadalah perintah "yank" - perintah itu menarik (menyalin) teks yang ditentukan oleh perintah gerakan berikut. * Dengan demikian yemenarik ke akhir kata, y0menarik 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.

ddadalah sinonim untuk d_dan menghapus seluruh baris saat ini. Demikian juga, ccadalah 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; yyakan menarik seluruh baris saat ini seperti y_.

Ada set sinonim lain: Dadalah sinonim untuk d$dan akan menghapus dari posisi kursor ke akhir baris. Cadalah sinonim untuk c$dan akan mengubah teks dari posisi kursor ke akhir baris, menempatkan Anda dalam mode sisipkan untuk mengetik teks baru.

Namun, Yadalah sinonim lain untuk yyatau y_dan akan menarik seluruh baris , bukan hanya dari kursor ke akhir baris seperti yang Anda harapkan dari Cdan Dpola.


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, Ssinonim lain untuk ccatau c_.

Wildcard
sumber
3
Saya tidak yakin mengapa itu dibuat seperti itu. Anda harus bertanya kepada Bill Joy tentang hal itu. Akan tetapi, kemungkinannya, ini adalah bug logis, yang baru saja tidak pernah diperbaiki di vi asli dan kemudian membuatnya menjadi semua klon dan akhirnya oleh karenanya dituntut oleh POSIX.
Christian Brabandt
3
Jika Anda pernah menemukan jawabannya, mereka juga membutuhkannya di sini . ;)
joeytwiddle
1
Saya ragu ini adalah alasan sebenarnya, tetapi orang yang keberatan dengan Y dipetakan kembali dalam vim-masuk akal berpendapat bahwa, sebagai programmer C, mereka menggunakan to-line-of-line menyentak jauh lebih dari seluruh-line menyentak, dan oleh karena itu pemetaan default baik. YMMV: tentu saja milikku.
Kaya

Jawaban:

16

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:

Try the command YP. This makes a copy of the current line 
and leaves you on this copy, which is placed before the current line. 
The command Y is a convenient abbreviation for yy. 
The command Yp will also make a copy of the current line, 
and place it after the current line. 
You can give Y a count of lines to yank, and thus duplicate 
several lines try 3YP.

Kemudian dalam daftar perintah (lihat lampiran dalam versi pdf ), deskripsi untuk Y adalah ini:

Y  Yanks a copy of the current line into the unnamed buffer, 
   to be put back by a later p or P; a very useful synonym for yy.

Dengan cara ini saya yakin Y adalah fitur dan bukan bug.

Adapun inkonsistensi dengan Ddan C- 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, Ddan Cmerupakan jenis gula sintaksis karena mereka menduplikasi fitur yang sudah ada) mereka memilih operasi yang menambahkan sebanyak mungkin teks ( Ymenggandakan seluruh baris) atau menghapus teks sesedikit mungkin ( Ddan Cmenghapus hingga akhir baris dan bukan seluruh baris).

Boris Serebrov
sumber
Oke, saya suka YP; itu cepat dan mudah diketik. Saya yakin. ;)
Wildcard
8

Yadalah perintah menarik versi vi pertama (ex-1.1, 1 Januari 1978). Versi ini tidak memiliki yycammand. ex-2.2 (6 Mei 1979) memang memiliki keduanya yydan Y. Jadi sebenarnya yyadalah sinonim untuk Y( Ysebelum yy).

pengguna3224237
sumber
Ini jawaban yang sebenarnya. Ytidak mengikuti logika yang sama dengan perintah lain karena itu mendahului hal itu kemudian retconned sebagai singkatan untuk.
mechalynx