Чи є для цього конкретна історична причина?
Передумови - (ви можете пропустити цю частину, якщо вже розумієте питання.)
Як проміжні / просунуті 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_
.