2012-08-16 24 views
67

Làm cách nào để xóa một dòng mà không đặt nó vào bộ đệm mặc định?Làm thế nào để xóa (không cắt) trong Vim?

Ví 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 với sự xóa (cutted) một. Tôi biết rằng tôi có thể sử dụng bộ đệm như "1yy, dd rồi "1p, nhưng tôi luôn quên đặt chuỗi đã sao chép vào bộ đệm, sau đó tôi cần dán nội dung của mình trước (dòng sẽ được sao chép) rồi xóa nội dung tôi muốn (dòng mà tôi muốn được thay thế bằng trang trước đó.)

Làm cách nào để xóa văn bản trong Vi (m) mà không cần sao chép văn bả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.

+4

bản sao có thể có của [Trong vim là có cách xóa mà không đặt văn bản trong sổ đăng ký?] (Http://stackoverflow.com/questions/54255/in-vim-is-there-a-way-to- delete-without-put-text-in-the-register) – eckes

Trả lời

70

Sử dụng "đăng ký lỗ đen", "_ để thực sự xóa một cái gì đó: "_d.
Sử dụng "_dP để dán nội dung nào đó và giữ 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 hiện lệnh không bình thường khi 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 nhập, tất nhiên. Tôi có những:

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

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

+1

Không, 'd' vẫn" cắt "và' p' vẫn còn "dán", trong khi ' d' xóa cho thực và' p' ném đi văn bản đã chọn và dán nội dung của thanh ghi mặc định. ' p' cho 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

6

Bạn có thể sử dụng "_d để ngăn mọi thứ ghi đè văn bản được kéo dài của bạn. Bạn có thể lưu trữ văn bản được kéo dài hoặc xóa trong bất kỳ thanh ghi nào bạn muốn với "_ là thanh ghi '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

15

Đó là một trong những điều tôi không thích về vim ... tôi đã kết thúc bản đồ dd đến đăng ký lỗ đen trong vimrc của tôi và cuộc sống đã tốt vì:

nnoremap d "_d 
vnoremap d "_d 
+4

thì bạn cắt như thế nào? – VitalyB

+2

'v/V' với' x' cũng bị cắt. Và cắt bằng 'x' cũng kết hợp với' Ctrl + x' trong bất kỳ hệ điều hành nào. – FaithReaper

39

các lỗ đen đăng ký"_ sẽ làm các trick, nhưng có một giải pháp tốt hơn:

Khi bạn nhập dòng trở lại với p lệnh bạn đang dán nội dung của (dễ bay hơi) đăng ký mặc định"", đã bị ghi đè bởi dd. Nhưng bạn vẫn có thể dán từ (không biến động) đăng ký yank"0, lệnh này 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 
5

á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, nó là một thực hành tốt đẹp để có "lãnh đạo" bộ chìa khóa để dấu phẩy, ví dụ:

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

những 2 đoạn mã sẽ làm cho "d" được lệnh cắt mới của bạn.

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

+1

Điều này thật tuyệt vời, cảm ơn –

1
yy 
Vx 
p 

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

Các vấn đề liên quan