Есть ли конкретная историческая причина для этого?
Фон - (вы можете пропустить эту часть, если вы уже поняли вопрос.)
Как известно опытным / опытным 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_
.
Ответы:
Я нашел статью «Введение в редактирование экрана с помощью Vi» Уильяма Джоя (создатель vi) и Марка Хортона (сопровождающий vi с 1979 года).
Из статьи ясно, что поведение Y по умолчанию - не ошибка, а желаемая особенность. В разделе «Перестановка и дублирование текста» они упоминают это:
Далее в списке команд (см. Приложение в pdf-версии ) описание для Y таково:
Таким образом, я уверен, что Y была фича, а не ошибка.
Что касается несоответствия
D
иC
- у меня также есть логическое объяснение. Если вы попытаетесь представить себя автором текстового редактора, ваше основное желание - создать новый текст, а не удалять его. Они (авторы текстовых редакторов) хотят, чтобы их пользователи писали больше текста и все больше и больше ...Таким образом, для команд синтаксического сахара (и
Y
,D
иC
являются своего рода синтаксическим сахаром, потому что они дублируют уже существующие функции), они выбирают операции, которые добавляют как можно больше текста (Y
дублирует всю строку), или удаляют как можно меньше текста (D
иC
удаляют до конец строки, а не вся строка).источник
YP
; это быстро и легко набрать. Я убеждена. ;)Y
был командой yank первой версии vi (ex-1.1, 1 января 1978). Эта версия не имелаyy
Cammand. бывший 2.2 (6 мая 1979 г.) имел и тоyy
и другоеY
. Так что на самом делеyy
это синонимY
(Y
предшествуетyy
).источник
Y
не следует той же логике, что и другие команды, потому что она предшествует тому, что позже было переименовано в аббревиатуру.