Чи є для цього конкретна історична причина?
Передумови - (ви можете пропустити цю частину, якщо вже розумієте питання.)
Як проміжні / просунуті viкористувачі будуть знати, yє команда-це «смикати» смикає (копію) текст , заданий з допомогою наступної команди руху. * Таким чином , yeсмикає до кінця слова, y0смикає від позиції курсора до початку рядка, y_янки весь поточний рядок, y$янки від положення курсору до кінця поточного рядка тощо.
Команда d(delete) та команда c(change) можуть використовуватися і з усіма цими рухами.
ddє синонімом d_і видаляє весь поточний рядок. Так само ccє синонімом c_і змінить поточний рядок (тобто він видалить увесь текст і переведе вас у режим вставки на початку рядка). **
Команда "yank" слідує цій конвенції; yyбуде витягувати весь поточний рядок так само y_.
Існує ще один набір синонімів: Dє синонімом для d$та видалить з позиції курсора до кінця рядка. Cє синонімом c$і змінить текст з позиції курсору до кінця рядка, перевівши вас у режим вставки для введення нового тексту.
Однак Yє ще одним синонімом для yyі y_і буде витягувати весь рядок , а не лише від курсору до кінця рядка, як ви могли б очікувати від Cі Dшаблонів.
Я розумію, що у Vim це зберігалося таким чином, щоб зберегти відсталу сумісність із vi, як згадується у довідці Vim під :help Y:
Якщо вам подобається, щоб "Y" працював від курсору до кінця рядка (що більш логічно, але не сумісно з Vi), використовуйте ": map Y y $".
Отже, це перекупка від vi. Чудово.
Але чому команда була спроектована саме так? Чи була в ньому якась логіка?
* Зокрема, він розміщує текст у реєстрі 0 та вказує неназваний реєстр на регістр 0.
** Хоча це не стосується мого питання, Sце ще один синонім для ccабо c_.