Kopieren von Text, der von mehreren Cursorn ausgewählt wurde, in einen neuen Puffer


9

Angenommen, wir möchten die von allen Cursorn ausgewählte Region in mehreren Cursorn beenden und alles in einen neuen, leeren Puffer ziehen. Wie macht man das mit mehreren Cursorn?

Beachten Sie, dass ein einfaches Kopieren und Einfügen des Texts in den neuen Puffer nicht funktioniert, da nur der Bereich vom ersten Cursor entfernt wird (wie hier angegeben ).

Hinweis: Diese Frage ist durch die Antwort und das Problem motiviert, die in: Nur die Zeilen mit den Cursorn in mehreren Cursorn beibehalten

Antworten:


9

Sobald der Text beendet wurde, verlassen Sie den Mehrfachcursor ( enter) und drücken Sie den neuen Puffer C-x r y(normalerweise befindet sich der getötete Text im Rechteck-Kill-Ring).


3
Nachdem ich tausende Male nicht alle getöteten Dinge zerrt habe, bin ich frustriert festzustellen, dass man mehrere Cursor verlassen MUSS, damit es C-x r yfunktioniert. :(
stackunderflow

Der getötete Text bleibt beim ersten Mal irgendwie bestehen. Gibt es so etwas wie einen "Cache", den ich löschen muss? Vielen Dank!
Benjamin

1
Ich halte diese Lösung für einen hässlichen Hack.
dev1223

0

Versuche dies. Wählen Sie einfach Text mit mehreren Cursorn aus und drücken Sie Cc. Genau wie in jedem anderen normalen Editor heutzutage.

(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))))

Bitte beachten Sie, dass die Abhängigkeit von Bibliothek s vorhanden ist. Auch dieser Code erwartet, dass Sie den CUA-Modus verwenden. Wenn nicht, müssen Sie die Beratungsdefinition unten anpassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.