Xóa trong Vim và sau đó dán mà không có dòng mới


11

Nhiều lần trong vim tôi muốn xóa một dòng hoàn toàn, vì vậy tôi sử dụng dd. Tuy nhiên, sau đó tôi cần dán dòng đó vào một số vị trí khác trong một dòng, nhưng điều này sẽ chèn một dòng mới trước khi dán, do đó, khiến tôi rất khó có được kết quả mong muốn. Ví dụ,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

Khi tôi làm điều này với đoạn mã trên tôi nhận được:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

rất xa so với kết quả mà tôi muốn ... làm cách nào tôi có thể ngăn chặn hành vi dòng mới này hoặc sử dụng một phương pháp khác thực hiện rất hiệu quả? Tôi không nghĩ d $ là tốt bởi vì tôi không chỉ phải đi đến đầu dòng, mà nếu tôi muốn xóa dòng trống quá, tôi cần phải xóa nó trong một đăng ký khác, tôi cảm thấy như có một cách dễ dàng hơn! Cảm ơn.



1
nó không phải là một bản sao, như tôi đã nói tôi muốn một cách hiệu quả hơn sau đó sẽ bắt đầu dòng, tôi thực sự muốn xóa dòng hoàn chỉnh với ký tự dòng mới .... không chỉ là nội dung của dòng
fYre

Oh, tôi hiểu ý của bạn bây giờ. Nó không rõ ràng với tôi những gì bạn đang cố gắng thực hiện.
EvergreenTree

1
0Dxóa dòng trừ ngắt dòng. Và hơn là gJtham gia các dòng. Bây giờ bạn có thể đặt văn bản mà không có dòng ngắt và không có dòng trống.
Alex Kroll

Câu trả lời:


9

Bạn có thể đi bất cứ nơi nào trong dòng phía trên dòng bạn muốn xóa, sau đó nhấn JDvà dán nó pvào điểm mong muốn.

  • Jnối hai dòng và di chuyển bạn khi bắt đầu văn bản bạn muốn xóa. Thao tác này sẽ xóa một ký tự dòng mới và thụt dòng của dòng bạn muốn di chuyển.
  • D xóa từ vị trí con trỏ hiện tại đến cuối dòng nhưng vẫn giữ nguyên ký tự dòng mới.

Gợi ý: Bạn có thể sử dụng :punếu bạn đã xóa Dhoặc kéo theo y$và bạn muốn dán bằng một dòng mới.


3

Không thực sự đơn giản, nhưng hiệu quả hơn một chút và bạn cũng có thể tạo bản đồ chế độ bình thường cho cả hai chuỗi:

  • yanking: đi đến dòng bạn muốn di chuyển, sau đó ^D"_dd
  • dán: đi đến từ bạn muốn thay thế, sau đó viwp

2

Bạn có thể đạt được một cái gì đó hoạt động khá tốt với một imap. Thêm phần sau vào vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Điều này sẽ tạo ra một ánh xạ cho CTRL-anó sẽ dán văn bản đã xóa cuối cùng (có ddhoặc tương tự). Nếu bạn thích, tất nhiên bạn có thể sử dụng một khóa khác để ánh xạ.

Người giới thiệu:

:h i_CTRL-R
:h quote1
:h J

1

Điều này cũng xuất hiện với tôi một chút, chưa bao giờ nghĩ sẽ tối ưu hóa nó trước đây nhưng ánh xạ này hoạt động:

nmap dil ^d$

dillà "delete phù hợp", tương tự như diw, di"vv


1

Dán mà không có dòng mới

Đặt cái này trong tệp .vimrc của bạn:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Thí dụ:

<span style="color:">danger</span>

Bây giờ bạn có thể nhập gpđể chèn #D51B3Fsau color:khi con trỏ của tôi :ở chế độ Bình thường.

Yank không có dòng mới

Sử dụng câu trả lời của flukus:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

như từ viết tắt của dòng bên trong . Điều này cũng được thoát khỏi thụt đầu dòng.


0

Bạn có thể chọn văn bản bạn muốn sao chép bằng cách nhấn vvà sau đó đưa nó vào bộ đệm bằng cách nhấn yvà sau đó dán nó vào bất cứ đâu bằng cách p. Nó không chèn bất kỳ dòng mới.


Đúng, nhưng điều này vẫn để lại một dòng trống.
muru
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.