Làm thế nào để xóa một từ và chuyển sang chế độ chèn trong Vim?


98

Ở chế độ bình thường, tôi có thể nhấn Ctrl+ Eđể xóa phần còn lại của từ hiện tại và chuyển sang chế độ chèn.

Tôi muốn xóa toàn bộ từ, bất kể vị trí con trỏ (tất nhiên là trong từ).

Câu trả lời:


164

Bạn có thể sử dụng "thay đổi từ bên trong" bằng cách nhập "ciw" để xóa một từ mà con trỏ của bạn đang bật.

Các lệnh "bên trong" và "a" rất tuyệt trong Vim, cũng có thể thử "ci {" bên trong khối {} hoặc "ca {" nếu bạn cũng muốn xóa các ký tự {}. Để dịch các lệnh này sang tiếng Anh để ghi nhớ chúng tốt hơn, hãy thử: "change inside {block" và "change a {block".

Tài liệu tại http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects


"caw" có thể được sử dụng thay cho "ciw" cùng chức năng.
Amjith

Trong khi 'caw' và 'ciw' sẽ thay thế toàn bộ từ, chỉ cần 'cw' sẽ thay đổi từ vị trí con trỏ hiện tại đến cuối từ hiện tại.
Drew Stephens

Tôi đã chỉnh sửa câu trả lời từ việc kể về "co {" thành "ca {" như được nhắc nhở bởi nhận xét của jinxed_coders. Tùy chỉnh cũ của tôi thực hiện các lệnh "(a) <>" dưới dạng các lệnh "(o) death <>".
Kaali

19
ciwcawkhông hoàn toàn giống nhau: ciwchỉ xóa từ, cawxóa cả dấu cách ở cuối.
Roberto Bonvallet

5
: giúp các đối tượng trong vim đọc thêm về các loại lựa chọn này.
Aaron

19

Câu trả lời cho câu hỏi tiếp theo của bạn: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.

3
Làm thế nào để làm điều này nhiều lần liên tiếp? Mỗi lần bạn dán, bộ đệm sẽ lấp đầy từ mà tôi đã dán.
Ben Gartner

1
@BenGartner Tìm thấy điều này tại wiki Vim Mẹo : Dùng yiwđể sao chép từ hiện tại, đặt con trỏ vào từ cần thay thế, sử dụng ciw<C-r>0. Sau đó, bạn có thể đặt con trỏ vào từ tiếp theo và sử dụng .để thực hiện lại việc thay thế.
siegi

@BenGartner Nếu tất cả những gì bạn đang cố gắng làm là thay thế tất cả các phiên bản của WORD_A bằng WORD_B, thì bạn chỉ cần sử dụng chế độ cũ của vim :%s/a/b/g,. acó thể là văn bản chính xác hoặc một biểu thức chính quy và blà những gì bạn sẽ thay thế tất cả các kết quả phù hợp avới. Bạn có thể kiểm tra regexes với /chế độ vim . Thay thế %bằng số dòng hoặc dải ô nếu bạn không muốn thay thế trên tất cả các dòng.
Braden tốt nhất

8

Đối với câu hỏi thứ hai: bPldw

Theo thứ tự, thao tác này sẽ đưa bạn đến đầu từ hiện tại, chèn thanh ghi mặc định vào trước con trỏ, chuyển đến ký tự tiếp theo (đưa bạn qua phần cuối của văn bản bạn vừa chèn) và xóa phần còn lại của từ.


5
điều này cũng xóa khoảng trắng sau từ. Nên bPlde.
0x89

10
Không, nên như vậyviwp
aehlke

3

Đối với câu hỏi đầu tiên, bcwcũng làm việc. Nó có nghĩa là " bbắt đầu từ, change word". Nhưng tôi nghĩ ciwlà đáng nhớ hơn, có nghĩa là " change inner word", chỉ một bước.

Đối với câu hỏi thứ hai về "thay thế bằng cách sử dụng dán", giải pháp của tôi là "_diwP. Nó delete inner word đến một đăng ký bạn không quan tâm và paste nội dung đăng ký mặc định của. Một lợi thế là bạn có thể dán thanh ghi mặc định nhiều lần, vì nó sẽ không bị ô nhiễm. Đó là một khu phức hợp nhỏ nên tôi lập bản đồ nnoremap ,r "_diwP.


2

Hoặc, bạn có thể sử dụng chuỗi phím bdwiđể xóa từ hiện tại và chuyển sang chế độ CHÈN.


1
Bạn có thể sử dụng bcwđể đi đến đầu của từ hiện tại, sau đó thay đổi từ, điều này sẽ để lại chế độ chèn.
Hank Gay

Nếu con trỏ của bạn đã ở trên ký tự đầu tiên của từ, điều đó sẽ kết thúc việc xóa từ trước đó.
Warren Pena 10/09/09

3
@WarrenPena Trong trường hợp đó, chỉ cần sử dụng dwi. Chỉ cần cẩn thận rằng cảnh sát không nhận thấy, vì DWI là bất hợp pháp ở hầu hết các tiểu bang.
Braden tốt nhấ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.