Tại sao `cw` và` ce` lại làm điều tương tự?


15

Điều này luôn làm tôi khó chịu về các lệnh wWchuyển động mà dường như chúng hoạt động khác nhau khi được sử dụng với clệnh hange so với khi sử dụng một mình hoặc với dlệnh elete.


Ví dụ: với con trỏ trên "q" của văn bản này:

The quick brown fox jumps over the lazy dog.

dwkết quả trong

The brown fox jumps over the lazy dog.

và gõ dekết quả trong

The  brown fox jumps over the lazy dog.

(Lưu ý hai khoảng trắng giữa "The" và "brown".)


Lệnh yank cũng xử lý wekhác nhau, như có thể được hiển thị bằng cách so sánh yeP:

The quickquick brown fox jumps over the lazy dog.

ywP:

The quick quick brown fox jumps over the lazy dog.

Tuy nhiên, gõ một trong hai ceslow<Esc>hoặc cwslow<Esc>kết quả trong cùng một điều :

The slow brown fox jumps over the lazy dog.

Đây có phải là tài liệu ở đâu đó? Logic đằng sau nó là gì và làm thế nào tôi có thể dự đoán kết quả của một lệnh sử dụng w?

Câu trả lời:


18

Đó là một trường hợp đặc biệt. Kiểm tra tài liệu cho WORD , trong "Trường hợp đặc biệt":

Trường hợp đặc biệt: "cw" và "cW" được coi như "ce" và "cE" nếu con trỏ ở trạng thái không trống. Điều này là do "cw" được hiểu là từ thay đổi và một từ không bao gồm khoảng trắng sau. {Vi: "cw" khi ở chỗ trống, theo sau là các ô trống khác chỉ thay đổi ô trống đầu tiên; đây có thể là một lỗi, vì "dw" xóa tất cả các khoảng trống}

Một trường hợp đặc biệt khác: Khi sử dụng chuyển động "w" kết hợp với toán tử và từ cuối cùng được chuyển qua ở cuối dòng, cuối từ đó sẽ trở thành cuối của văn bản được vận hành, không phải là từ đầu tiên trong từ tiếp theo hàng.

Việc thực hiện Vi ban đầu của "e" là lỗi. Ví dụ: lệnh "e" sẽ dừng trên ký tự đầu tiên của một dòng nếu dòng trước đó trống. Nhưng khi bạn sử dụng "2e" thì điều này không xảy ra. Trong Vim "ee" và "2e" là như nhau, hợp lý hơn. Tuy nhiên, điều này gây ra sự không tương thích nhỏ giữa Vi và Vim.


1
Neovim 0.2.1 thêm cờ 'cpoptions' "_" (gạch dưới) để thay đổi hành vi này. neovim.io/doc/user/options.html#'cpoptions '
Justin M. Keyes

6

Sự khác biệt giữa hành vi của chuyển động trong cwso với dwcó thể được giải thích một cách đơn giản: thông thường nếu bạn muốn thay đổi một từ bạn sẽ rời khỏi khoảng trắng theo sau nó, trong khi xóa một từ gợi ý bạn cũng muốn xóa khoảng trắng.

Nếu bạn muốn khoảng trắng biến mất vì một số lý do (tôi làm điều đó đủ thường xuyên nhưng không thể nghĩ ra một ví dụ) thì hãy sử dụng awchuyển động : caw.

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.