Sao chép văn bản được chọn bởi nhiều con trỏ vào bộ đệm mới


9

Giả sử chúng tôi muốn giết vùng được chọn bởi tất cả các con trỏ trong nhiều con trỏ và đưa tất cả vào một vùng đệm mới, trống. Làm thế nào để bạn làm điều đó với nhiều con trỏ?

Lưu ý rằng một bản sao đơn giản và dán văn bản trên bộ đệm mới không hoạt động, vì nó chỉ lấy vùng từ con trỏ đầu tiên (như được báo cáo ở đây ).

Lưu ý: Câu hỏi này được thúc đẩy bởi câu trả lời và vấn đề được trình bày trong: Chỉ giữ các dòng có con trỏ trong nhiều con trỏ

Câu trả lời:


9

Khi văn bản đã bị giết, hãy thoát nhiều con trỏ ( enter) và trong khi trong bộ đệm mới nhấn C-x r y(thông thường văn bản bị giết nằm trong vòng giết hình chữ nhật)


3
Sau hàng ngàn lần thất bại trong việc đánh cắp tất cả những thứ bị giết, tôi thất vọng khi thấy rằng một PHẢI thoát khỏi nhiều con trỏ để thực hiện C-x r ycông việc. :(
stackunderflow

Văn bản bị giết trong lần đầu tiên vẫn tồn tại bằng cách nào đó, có thứ gì đó giống như "bộ đệm" mà tôi cần xóa không? Cảm ơn!
benjaminz

1
Tôi coi giải pháp này là hack xấu xí.
dev1223

0

Thử cái này. Chỉ cần chọn văn bản bằng nhiều con trỏ và nhấn Cc. Giống như trong bất kỳ biên tập viên bình thường khác những ngày này.

(setq *cutom/bulk-clipboard* nil)

(mc/load-lists)
(push 'custom/copy-across-cursors
      mc/cmds-to-run-once)
(push 'cua-copy-region
      mc/cmds-to-run-once)


(defun custom/copy-across-cursors ()
  (interactive)
  (mc/save-excursion
   (mc/save-window-scroll
    (mc/for-each-fake-cursor
     (save-excursion
       (custom/copy-across-cursor cursor)))))
  (mc--reset-read-prompts)
  (push (buffer-substring
         (caar (region-bounds))
         (cdar (region-bounds)))
        *cutom/bulk-clipboard*)
  (kill-new (s-chomp (loop for x in *cutom/bulk-clipboard*
                           concat (concat x "\n"))))
  (setq *cutom/bulk-clipboard* nil))

(defun custom/copy-across-cursor (cursor)
  (let ((mc--executing-command-for-fake-cursor t)
        (id (overlay-get cursor 'mc-id))
        (annoying-arrows-mode nil)
        (smooth-scroll-margin 0))
    (mc/add-fake-cursor-to-undo-list
     (mc/pop-state-from-overlay cursor)
     (ignore-errors
       (custom/cursor-handle-copy)
       (mc/create-fake-cursor-at-point id)))))

(defun custom/cursor-handle-copy ()
  (when (region-active-p)
    (push (buffer-substring
           (caar (region-bounds))
           (cdar (region-bounds)))
          *cutom/bulk-clipboard*))
  (when deactivate-mark (deactivate-mark)))


(advice-add #'cua-copy-region
            :around (lambda (oldfn &rest args)
                      (if (> (mc/num-cursors) 1)
                          (custom/copy-across-cursors)
                        (apply oldfn args))))

Xin vui lòng, lưu ý rằng sự phụ thuộc vào thư viện của hiện diện. Ngoài ra mã này hy vọng bạn sử dụng chế độ CUA. Nếu không, bạn phải tùy chỉnh định nghĩa lời khuyên ở phía dưới.

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.