Làm thế nào để xóa (không cắt) trong Vim?


145

Làm thế nào tôi có thể xóa một dòng mà không đặt nó vào bộ đệm mặc định của tôi?

Thí dụ:

line that will be copied.

line that I want to be substitued with the previous one.

Những gì tôi đang cố gắng làm:

yy
dd
p

Nhưng Vim thay thế chuỗi đã sao chép gần đây bằng chuỗi đã bị xóa (đã cắt). Tôi biết rằng tôi có thể sử dụng bộ đệm như, "1yy, ddsau đó "1p, nhưng tôi luôn luôn quên đặt chuỗi sao chép trong một bộ đệm sau đó tôi cần phải dán nội dung của tôi đầu tiên (dòng đó sẽ được sao chép) và sau đó xóa những gì tôi muốn (dòng mà tôi muốn được thay thế bằng cái trước.)

Làm thế nào tôi thực sự có thể xóa một văn bản trong Vi (m) mà không cần sao chép nó?

Một câu hỏi liên quan khác là làm thế nào tôi có thể chuyển tiếp xóa một từ trong chế độ chèn? Tôi muốn một cái gì đó tương tự như Ctrl+ w.


Câu trả lời:


130

Sử dụng "thanh ghi lỗ đen", "_để thực sự xóa một cái gì đó : "_d.
Sử dụng "_dPđể dán một cái gì đó và giữ nó có sẵn để dán thêm.

Đối với câu hỏi thứ hai, bạn có thể sử dụng <C-o>dw. <C-o>được sử dụng để thực thi một lệnh bình thường mà không cần rời khỏi chế độ chèn .

Bạn có thể thiết lập ánh xạ của riêng bạn để lưu gõ, tất nhiên. Tôi có những:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP

Thx, bạn trả lời cả hai câu hỏi của tôi. Nhưng tôi không hiểu làm thế nào các lệnh noremap này sẽ giúp tôi. Tôi có bị mất chức năng cắt không?
MaikoID

3
Không, dvẫn "cắt" và pvẫn "dán", trong khi <leader>dxóa thực và xóa <leader>pvăn bản đã chọn và dán nội dung của thanh ghi mặc định. <leader>pcho phép tôi dán cùng một văn bản nhiều lần mà không phải sử dụng các thanh ghi có tên.
romainl

119

Thanh ghi lỗ đen "_ sẽ thực hiện thủ thuật, nhưng có một giải pháp tốt hơn:

Khi bạn nhập lại dòng bằng plệnh bạn đang dán nội dung của thanh ghi mặc định (dễ bay hơi) "", đã bị ghi đè bởi dd. Nhưng bạn vẫn có thể dán từ thanh ghi yank (không biến động) "0, sẽ không bị ghi đè bởi lệnh xóa dd.

Vì vậy, đây là những lệnh bạn muốn sử dụng theo ví dụ của bạn:

yy
dd
"0p

1
Tuyệt vời, đây nên là câu trả lời được chấp nhận. Việc chỉ định thủ công một đăng ký bất cứ khi nào tôi muốn dán dễ dàng hơn nhiều so với việc chỉ định đăng ký mỗi khi tôi xóa bất cứ điều gì.
JShorthouse

43

Đó là một trong những điều tôi không thích về vim ... Tôi đã kết thúc việc ánh xạ ddtới thanh ghi lỗ đen trong .vimrc của tôi và cuộc sống đã tốt đẹp kể từ:

nnoremap d "_d
vnoremap d "_d

6
Sau đó, làm thế nào để bạn cắt?
VitalyB

11
v/Vvới xcũng được cắt. Và cắt với xcũng phù hợp với Ctrl + xtrong bất kỳ hệ điều hành.
WesternGun

22

các ánh xạ sau đây sẽ tạo ra:

  • d => "xóa"
  • lãnh đạo d => "cắt"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

Ngoài ra, một cách hay là đặt khóa "người lãnh đạo" thành dấu phẩy, ví dụ:

let mapleader = ","
let g:mapleader = ","

2 đoạn mã này sẽ biến ", d" thành lệnh cắt mới của bạn.

Nếu bạn muốn sử dụng các togther ánh xạ này với cấu hình clipboard của hệ thống được chia sẻ, hãy xem thêm chi tiết tại https://github.com/pazams/d-is-for-delete


Tôi ước tôi có thể nâng cao câu trả lời này hơn một lần - Tôi đã sử dụng câu trả lời của kprobst nhưng sau đó để cắt một dòng, tôi phải sử dụng yyddmột chút không bền vững trên ngón tay của mình ;-).
Tahir Hassan

1
ý tưởng intellij hành động rất kỳ lạ sau này. dd không làm gì cả , d không làm gì cả
s1n7ax

Tôi thích giải pháp rất nhiều. Một điều không làm việc cho tôi - là cắt giảm với ,dd. Sau khi thêm nnoremap <leader>dd ""ddnó bắt đầu hoạt động
Alexey

8

Bạn có thể sử dụng "_dđể ngăn chặn những thứ ghi đè lên văn bản đã viết của bạn. Bạn có thể lưu trữ văn bản đã bị xóa hoặc bị xóa trong bất kỳ đăng ký nào bạn muốn "_là đăng ký 'lỗ đen', nơi bạn gửi nội dung mà bạn không quan tâm.

Để biết thêm thông tin bạn có thể gõ :help "_hoặc:help deleting


-1
yy
Vx
p

Khi ở chế độ trực quan, xsẽ xóa lựa chọn, vì vậy nếu bạn muốn xóa toàn bộ một dòng, trước tiên hãy nhấn Vđể chọn dòng trong chế độ trực quan và sau đó nhấn xđể xóa lựa chọn.


3
Điều này sao chép dòng đã xóa vào bảng tạm, đó chính xác là những gì OP muốn tránh.
aVeryStableGenius

Cảm ơn! Bằng cách nào đó, nó hoạt động hoàn hảo trên plugin Evil của Emacs
Pedro Penna
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.