Есть ли конкретная историческая причина для этого?
Фон - (вы можете пропустить эту часть, если вы уже поняли вопрос.)
Как известно опытным / опытным viпользователям, yэто команда «yank» - она восстанавливает (копирует) текст, заданный следующей командой перемещения. * Таким образом, yeрывок к концу слова, y0рывок от позиции курсора до начала строки, y_восстанавливает всю текущую строку, y$восстанавливает позицию курсора до конца текущей строки и т. д.
Команды d(удалить) и c(изменить) также могут использоваться со всеми этими движениями.
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_.