Tại sao Y là từ đồng nghĩa với yy thay vì y $?


28

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, Ymộ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 CD.


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_.


3
Tôi không chắc tại sao nó được làm như vậy. Bạn sẽ phải hỏi Bill Joy về nó. Tuy nhiên, rất có thể đây là một lỗi logic, chưa bao giờ được sửa trong vi gốc và sau đó biến nó thành tất cả các bản sao và cuối cùng đã được POSIX yêu cầu.
Christian Brabandt

3
Nếu bạn tìm thấy câu trả lời họ cũng cần nó ở đây . ;)
joeytwiddle

1
Tôi nghi ngờ đây là lý do thực tế, nhưng người phản đối Y bị ánh xạ trong vim nhạy cảm đã lập luận rằng, với tư cách là một lập trình viên C, họ đã sử dụng để kéo dài hơn nhiều so với việc kéo dài toàn bộ, và do đó ánh xạ mặc định là tốt. YMMV: của tôi chắc chắn có.
Giàu

Câu trả lời:


16

Tôi tìm thấy một bài báo "Giới thiệu về Chỉnh sửa hiển thị với Vi" của William Joy (người tạo vi) và Mark Horton (người duy trì từ năm 1979).

Từ bài báo, rõ ràng hành vi Y mặc định không phải là một lỗi, mà là một tính năng mong muốn. Trong phần "Sắp xếp lại và sao chép văn bản", họ đề cập đến điều này:

Try the command YP. This makes a copy of the current line 
and leaves you on this copy, which is placed before the current line. 
The command Y is a convenient abbreviation for yy. 
The command Yp will also make a copy of the current line, 
and place it after the current line. 
You can give Y a count of lines to yank, and thus duplicate 
several lines try 3YP.

Sau này trong danh sách các lệnh (xem phần phụ lục trong phiên bản pdf ), mô tả cho Y là:

Y  Yanks a copy of the current line into the unnamed buffer, 
   to be put back by a later p or P; a very useful synonym for yy.

Bằng cách này, tôi chắc chắn rằng Y là một tính năng và không phải là một lỗi.

Đối với sự không nhất quán với DC- tôi cũng có một lời giải thích hợp lý. Nếu bạn cố gắng nghĩ như một tác giả soạn thảo văn bản hơn mong muốn chính của bạn sẽ là tạo văn bản mới và không xóa nó. Họ (tác giả soạn thảo văn bản) muốn người dùng của họ viết nhiều văn bản hơn và ngày càng ...

Vì vậy, đối với các lệnh đường cú pháp (và Y, DClà loại đường cú pháp vì chúng sao chép các tính năng đã có), chúng chọn các thao tác thêm càng nhiều văn bản càng tốt ( Ysao chép toàn bộ dòng) hoặc xóa càng ít văn bản càng tốt ( DCxóa cho đến khi cuối dòng và không phải toàn bộ dòng).


Được rồi, tôi thích YP; đó là nhanh chóng và dễ dàng để gõ. Tôi đã bị thuyết phục. ;)
tự đại diện

8

Ylà lệnh yank của phiên bản vi đầu tiên (ví dụ 1.1, ngày 1 tháng 1 năm 1978). Phiên bản này không có yycamgers. ex-2.2 (ngày 6 tháng 5 năm 1979) đã có cả yyY. Vậy thực sự yylà một từ đồng nghĩa với Y( Yxảy ra trước yy).


Đây là câu trả lời thực sự. Ykhông tuân theo logic giống như các lệnh khác bởi vì nó có trước điều mà sau đó nó được đặt lại thành tên viết tắt.
điện tử
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.