Sao chép nhiều từ (từ các dòng khác nhau) và dán chúng cùng một lúc


7

Tôi muốn sao chép các chuỗi khác nhau từ các dòng khác nhau của tệp và sau đó dán chúng cùng một lúc. Nói cách khác, tôi muốn thu thập các từ khác nhau trong một giỏ và sau đó dán chúng cùng một lúc. Tôi có thể làm cái này như thế nào?

Câu trả lời:


15

Sử dụng một thanh ghi chữ hoa khi kéo (sao chép):

"Ay

"Anói để nối vào thanh aghi, trái với "ađiều đó sẽ thay thế nội dung của thanh aghi.

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

Bây giờ làm thế nào để xóa nội dung của một đăng ký?
Giăng

1
@ John Bạn có thể xóa một thanh ghi bằng cách ghi một macro trống vào nó, như thế này : 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ớ aAtham 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.
8bittree

6

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 động
  • zyy toán tử tương tự hoạt động trên các dòng
  • zy toán tử tương tự hoạt động trên lựa chọn trực quan
  • zyclệnh bình thường để làm trống các thanh ghi "z; hữu ích trước khi bắt đầu kéo dài một chuỗi các văn bản

Với nó, bạn có thể:

  • sao chép một số từ nhấn zyiwvà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 theo
  • sao chép một số dòng nhấn zyyvà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 theo
  • sao chép một số lựa chọn trực quan, nhấn zyvào từng lựa chọn

Mã hiện tại sẽ khóa zthanh ghi, nếu bạn thích sử dụng một thanh ghi khác, xví 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()

nhập mô tả hình ảnh ở đây


Chương trình đó là gì?
Segfault

byzanz-record và screenkey
user9433424

Điều này thật tuyệt! Điều này có thể được thay đổi để thêm một vòng lặp vào yank-append trên nhiều lựa chọn trực quan không? Nói rằng tôi muốn kéo tất cả các phần không có tệp đánh dấu. Tôi có thể /^#\s.\+và sau đó làm zyvví dụ!
Luciano
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.