Câu trả lời:
Sử dụng một thanh ghi chữ hoa khi kéo (sao chép):
"Ay
"A
nói để nối vào thanh a
ghi, trái với "a
điều đó sẽ thay thế nội dung của thanh a
ghi.
Khi bạn đã sao chép mọi thứ vào sổ đăng ký, bạn có thể dán tất cả cùng một lúc với:
"ap
qaq
. Ngoài ra, nếu bạn chỉ muốn tránh có rác trước đó, bạn có thể sao chép từ đầu tiên của mình bằng cách sử dụng thanh ghi chữ thường : "ay
. Hãy nhớ a
và A
tham khảo cùng một thanh ghi, chúng chỉ ảnh hưởng đến cách mọi thứ được thêm vào.
Bạn cũng có thể xác định toán tử tùy chỉnh của riêng mình, nó sẽ tăng dần bất kỳ đối tượng văn bản hoặc văn bản nào được bao phủ bởi một chuyển động:
fu! Incremental_yank(type, ...) abort
if a:type ==# 'char'
norm! `[v`]y
elseif a:type ==# 'line'
norm! '[V']y
elseif a:0
norm! gvy
endif
call setreg('z', @".(a:type ==# 'char' ? ' ' : ''), 'a' . getregtype('"'))
call setreg('"', @z, getregtype('z'))
endfu
nno <silent> zy :<C-U>set opfunc=Incremental_yank<CR>g@
xno <silent> zy :<C-U>call Incremental_yank(visualmode(), 1)<CR>
nno <silent> zyy :<C-U>set opfunc=Incremental_yank<Bar>exe 'norm! '.v:count1.'g@_'<CR>
nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p
Trong ví dụ này, 4 ràng buộc chính được cài đặt:
zy
Toán tử bình thường để tăng dần một đối tượng văn bản hoặc chuyển độngzyy
toán tử tương tự hoạt động trên các dòngzy
toán tử tương tự hoạt động trên lựa chọn trực quanzyc
lệnh bình thường để làm trống các thanh ghi "
và z
; hữu ích trước khi bắt đầu kéo dài một chuỗi các văn bảnVới nó, bạn có thể:
zyiw
vào từ đầu tiên, sau đó lặp lại thao tác với lệnh dot trên những từ tiếp theozyy
vào cái đầu tiên, sau đó lặp lại thao tác với lệnh dot trên những dòng tiếp theozy
vào từng lựa chọnMã hiện tại sẽ khóa z
thanh ghi, nếu bạn thích sử dụng một thanh ghi khác, x
ví dụ như, bạn có thể thay đổi các dòng sau:
call setreg('z', @", 'a' . getregtype('"')) call setreg('x', @", 'a' . getregtype('"'))
^ ^
call setreg('"', @z, getregtype('z')) → call setreg('"', @x, getregtype('x'))
^ ^ ^ ^
nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p nno <silent> zyc :<C-U>let [@", @x] = ['', '']<CR>p
^ ^
Để biết thêm thông tin, xem:
:h g@
:h getregtype()
:h setreg()
/^#\s.\+
và sau đó làm zyv
ví dụ!