Có một lý do lịch sử cụ thể cho việc này?
Bối cảnh - (bạn có thể bỏ qua phần này nếu bạn đã hiểu câu hỏi.)
Như vingười dùng trung cấp / nâng cao sẽ biết, ylà lệnh "yank", nó có thể tạo ra (bản sao) văn bản được chỉ định bởi lệnh di chuyển sau. * Do đó, yekéo dài đến cuối từ, kéo y0từ vị trí con trỏ đến đầu dòng, y_kéo toàn bộ dòng hiện tại, kéo y$từ vị trí con trỏ đến cuối dòng hiện tại, v.v.
Lệnh d(xóa) và lệnh c(thay đổi) đều có thể được sử dụng với tất cả các chuyển động này.
ddlà một từ đồng nghĩa cho d_và xóa toàn bộ dòng hiện tại. Tương tự, cclà một từ đồng nghĩa cho c_và sẽ thay đổi dòng hiện tại (nghĩa là nó sẽ xóa tất cả văn bản và đưa bạn vào chế độ chèn ở đầu dòng). **
Lệnh "yank" tuân theo quy ước này; yysẽ kéo toàn bộ dòng hiện tại giống như y_.
Có một bộ từ đồng nghĩa khác: Dlà từ đồng nghĩa cho d$và sẽ xóa từ vị trí con trỏ đến cuối dòng. Clà một từ đồng nghĩa cho c$và sẽ thay đổi văn bản từ vị trí con trỏ đến cuối dòng, đặt bạn vào chế độ chèn để nhập văn bản mới.
Tuy nhiên, Ylà một từ đồng nghĩa khác cho yyhoặc y_sẽ kéo dài toàn bộ dòng , không chỉ từ con trỏ đến cuối dòng như bạn mong đợi từ các mẫu Cvà D.
Tôi hiểu rằng trong Vim, nó được giữ theo cách này để duy trì khả năng tương thích ngược với vi, như được đề cập trong phần trợ giúp của Vim dưới :help Yđây:
Nếu bạn thích "Y" để làm việc từ con trỏ đến cuối dòng (hợp lý hơn, nhưng không tương thích với Vi), hãy sử dụng ": map Y y $".
Vì vậy, đây là một nắm giữ từ vi. Khỏe.
Nhưng, tại sao lệnh lại được thiết kế theo cách đó ngay từ đầu? Có logic nào cho nó bao giờ không?
* Cụ thể nó đặt văn bản trong thanh ghi 0 và trỏ thanh ghi không tên vào thanh ghi 0.
** Mặc dù nó không liên quan đến câu hỏi của tôi, Slà một từ đồng nghĩa khác cho cchoặc c_.