Есть ли конкретная историческая причина для этого?
Фон - (вы можете пропустить эту часть, если вы уже поняли вопрос.)
Как известно опытным / опытным 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_
.