Y, neden y $ yerine yy kelimesinin eş anlamlısıdır?


28

Bunun belirli bir tarihsel nedeni var mı?


Arkaplan - (Soruyu daha önce anladıysanız, bu bölümü atlayabilirsiniz)

Orta / ileri düzeydeki vikullanıcıların bileceği gibi y, "yank" komutu - aşağıdaki hareket komutu tarafından belirtilen metni sıralar (kopyalar). * Böylece yekelimenin sonuna doğru y0yanar, imleç konumundan satırın başına yanlar, y_mevcut çizginin tamamını y$, imleç konumundan geçerli çizginin sonuna, vb.

d(Silme) komuta ve c(değiştir) komutu her iki hareketlerin hepsi de kullanılabilir.

ddbu, d_geçerli satırın tamamıyla eşanlamlı ve silinen bir eşittir . Aynı şekilde, ccşu anki satırın eş anlamlısıdır c_ve değişecektir (yani tüm metni siler ve satırın başında ekleme moduna geçirir). **

"Yank" komutu bu sözleşmeyi izler; yytıpkı şu anki satırın aynısını yapacağız y_.

Başka Dbir eş anlamlı kümesi daha vardır: d$imleç konumundan satır sonuna kadar silinecek bir eş anlamlıdır . Cbu c$, yeni imleci yazmak için ekleme moduna getirerek metni imleç konumundan satırın sonuna kadar değiştirir.

Ancak, Ybir başka eşanlamlı yyveya y_ve yank edecek tüm çizgi Eğer beklediğiniz gibi satırın sonuna değil, sadece imleci, Cve Ddesenleri.


Vim'de viaşağıdaki Vim yardımında belirtildiği gibi geriye dönük uyumluluğun korunmasının bu şekilde tutulduğunu anlıyorum :help Y:

Eğer "Y" nin imleçten satır sonuna kadar (daha mantıklı ama Vi uyumlu değil) çalışmasını istiyorsanız ": map y y $" kullanın.

Öyleyse burası bir sahip vi. İnce.

Ancak, emir neden bu şekilde tasarlandı? Hiç bir mantık var mıydı?


* Özellikle, metni 0 yazmacına yerleştirir ve adsız yazmacıyı 0 yazmacına yönlendirir.

** Sorumla ilgisi olmasa da, veya Siçin başka bir eşanlamlı .ccc_


3
Neden böyle yapıldığından emin değilim . Bill Joy'a sormak zorunda kalacaksın. Ancak, olasılıklar, bu sadece orijinal vi'de hiç sabitlenmemiş ve daha sonra tüm klonlara girmemiş ve sonunda POSIX tarafından talep edilmiş olan mantıklı bir hatadır.
Christian Brabandt,

3
Cevabı bulursanız, burada da buna ihtiyaçları var . ;)
joeytwiddle,

1
Bunun asıl nedeni olduğundan şüpheliyim, ama Y'yi vim-mantıklı olarak reddetmeye itiraz eden kişi , bir C programcısı olarak, satır sonuna göre dizilmeyi tüm hattan çekmeye göre çok daha fazla kullandıklarını ve dolayısıyla varsayılan eşlemeler iyidir. YMMV: benimki kesinlikle var.
Rich

Yanıtlar:


16

William Joy (vi yaratıcısı) ve Mark Horton (1979'dan beri vi bakıcısı) tarafından "Vi ile Düzenlemeye Giriş" adlı bir yazı buldum .

Kağıttan, varsayılan Y davranışının bir hata değil, istenen bir özellik olduğu açıktır. In "yeniden düzenleme ve kopyalama metin" bölümüne bu söz:

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.

Daha sonra komutlar listesinde ( pdf versiyonundaki eklere bakınız ), Y'nin açıklaması şudur:

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.

Bu şekilde Y'nin bir özellik değil, bir özellik olduğuna eminim.

İle tutarsızlık gelince Dve C- Ben de mantıklı bir açıklama var. Bir metin editörü olarak düşünmeye çalışırsanız, ana arzunuzdan daha fazla yeni metin oluşturmak ve silmek olmaz. Onlar (metin editörü yazarları) kullanıcılarının daha fazla metin ve daha da fazla yazmasını isterler ...

Dolayısıyla, sözdizimsel şeker komutları için (ve Y, Dve Czaten varolan özellikleri çoğalttıkları için sözdizimsel şeker türleridir) mümkün olduğunca fazla metin ekleyen ( Ytüm çizgiyi çoğaltır) veya mümkün olduğunca az metin silen işlemleri ( Dve Csonuna kadar sil) çizginin sonu ve tüm çizgi değil).


Tamam, beğendim YP; bu hızlı ve yazmak kolaydır. İkna oldum. ;)
Wildcard,

8

Yilk vi versiyonunun yank komutuydu (eski 1.1, 1 Ocak 1978). Bu sürümde yykamera yoktu . Eski 2.2 (1979 6 Mayıs) hem var mıydı yyve Y. Yani aslında ( predates ) ile yyeşanlamlıdır .YYyy


Bu gerçek cevap. Ydiğer komutlarla aynı mantığı izlemiyor, çünkü daha sonra kısaltması olarak yeniden yapılandırıldığı şeyi önceden gösteriyor.
mechalynx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.