Câu trả lời:
Những gì bạn nên làm là tạo một imap của một khóa nhất định cho một loạt các lệnh, trong trường hợp này, các lệnh sẽ đưa bạn vào chế độ bình thường, xóa từ hiện tại và sau đó đưa bạn trở lại chèn:
:imap <C-d> <C-[>diwi
imap <C-d> <C-o>diw
hoạt động. Nó cũng không tạo ra một điểm hoàn tác, điều mà <Esc> luôn luôn làm.
Chế độ bình thường:
daw : delete the word under the cursor
caw : delete the word under the cursor and put you in insert mode
da)
và ci)
chưa bao giờ nghĩ về điều này!
.vimrc
hồ sơ của mình như vậy: nmap <Leader>d daw
vànmap <Leader>c caw
aw
là một ví dụ về lựa chọn đối tượng. Bạn có thể thử lựa chọn đối tượng trong chế độ trực quan để xem hiệu ứng của chúng: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
Tôi nghĩ rằng nó chỉ daw
daw - delete a word
a
là một lệnh cho Append text after the cursor [count] times.
nhưng làm thế nào để daw
làm việc?
d
ra lệnh bạn sẽ 'xóa'. 'A' là một loại tham số, chỉ định rằng việc xóa sẽ bao gồm một dấu phân cách. Cuối cùng, 'w', một cái khác parameter
- nếu bạn sẽ - chỉ định rằng một word
đơn vị sẽ bị xóa.
dw
và daw
?
dw
sẽ xóa từ con trỏ đến cuối từ, trong khi daw
sẽ xóa toàn bộ từ cùng với khoảng trắng. diw
sẽ xóa toàn bộ từ mà không chạm vào khoảng trắng xung quanh nó.
Dưới đây hoạt động cho chế độ Bình thường: Tôi đồng ý với câu trả lời của Dan Olson rằng có lẽ bạn nên ở chế độ bình thường trong hầu hết các thao tác xóa. Chi tiết bên dưới.
Nếu con trỏ ở trong từ:
diw
xóa trong từ (không bao gồm khoảng trắng)
daw
để xóa xung quanh từ (bao gồm khoảng trắng trước từ tiếp theo).
Nếu con trỏ ở đầu từ, chỉ cần nhấn dw
.
Điều này có thể được nhân lên bằng cách thêm các số thông thường cho chuyển động, ví dụ 2w để di chuyển về phía trước 2 từ, vì vậy d2w xóa hai từ.
Chế độ chèn ^ w
Ý tưởng sử dụng hjkl cho chuyển động trong Vim là sẽ hiệu quả hơn khi giữ tay bạn trên hàng nhà. Vào cuối của một từ ^ w hoạt động tuyệt vời để nhanh chóng xóa từ. Nếu bạn đã chuyển sang chế độ chèn, hãy nhập một số văn bản và sử dụng các phím mũi tên để kết thúc ở giữa từ mà bạn đã đi ngược lại triết lý hàng chủ.
Nếu bạn đang ở chế độ bình thường và muốn thay đổi từ, bạn chỉ cần sử dụng c
(thay đổi) thay vì d
(xóa) nếu bạn muốn thay đổi hoàn toàn từ đó và nhập lại chế độ chèn mà không cần phải nhấn i
để quay lại để gõ.
Ý bạn là như thế nào?
dw
dw
sẽ không xóa dấu gạch nối hoặc dấu chấm câu khác.
Nó không giống như có bất kỳ built-in cách để làm điều đó trong chế độ chèn, đó là câu hỏi. Một số câu trả lời khác là đúng cho chế độ bình thường, cũng như chỉ ra rằng có thể tạo ánh xạ tùy chỉnh để thêm chức năng trong chế độ chèn.
Thành thật mà nói, có lẽ bạn nên thực hiện hầu hết việc xóa trong chế độ bình thường. ^ W rất gọn gàng để biết nhưng tôi không chắc mình có thể nghĩ đến một tình huống mà tôi muốn làm điều đó hơn là thoát ra để vào chế độ bình thường và có các lệnh xóa mạnh hơn theo ý của tôi.
Vim rất khác với một số biên tập viên khác (bao gồm cả TextMate) theo cách này. Nếu bạn đang sử dụng nó một cách hiệu quả, có lẽ bạn sẽ thấy rằng bạn không dành nhiều thời gian ở chế độ chèn.
Để xóa toàn bộ từ mà con trỏ của bạn đang sử dụng diw
Để xóa toàn bộ từ mà con trỏ của bạn đang bật và để đưa bạn vào chế độ chèn, hãy sử dụng ciw
nếu bạn không muốn xóa toàn bộ từ nhưng xóa khỏi vị trí của bạndw/cw
Vì có rất nhiều cách để xóa một từ, hãy minh họa chúng.
Giả sử bạn chỉnh sửa:
foo-bar quux
và gọi một lệnh trong khi con trỏ ở trên thanh 'a' trong ':
foo-bquux # dw: letters then spaces right of cursor
foo-quux # daw: letters on both sides of cursor then spaces on the right
foo- quux # diw: letters on both sides of cursor
foo-bquux # dW: non-whitespace then spaces right of cursor
quux # daW: non-whitespace on both sides of cursor then spaces on the right
quux # diW: non-whitespace on both sides of cursor
Câu trả lời được chấp nhận thất bại khi cố gắng lặp lại xóa từ, thay vào đó hãy thử giải pháp này:
" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw
Nó ánh xạ CTRL-BackSpace, cũng hoạt động ở chế độ bình thường.
Trong vi cũ, b
di chuyển con trỏ đến đầu từ trước con trỏ, w
di chuyển con trỏ đến đầu từ sau con trỏ, e
di chuyển con trỏ ở cuối từ sau con trỏ vàdw
xóa từ con trỏ đến cuối từ.
Nếu bạn nhập wbdw
, bạn xóa từ xung quanh con trỏ, ngay cả khi con trỏ ở đầu hoặc cuối từ. Lưu ý rằng khoảng trắng sau một từ được coi là một phần của từ cần xóa.
Tôi muốn xóa không chỉ từ trước con trỏ, mà cả từ sau hoặc xung quanh con trỏ nữa.
Trong trường hợp đó, giải pháp được đề xuất bởi OP (tức là sử dụng <c-w>
) có thể được kết hợp với câu trả lời được chấp nhận để đưa ra:
inoremap <c-d> <c-o>daw<c-w>
cách khác (giải pháp ngắn hơn):
inoremap <c-d> <c-o>vawobd
Đầu vào mẫu:
word1 word2 word3 word4
^------------- Cursor location
Đầu ra:
word1 word4