Copiando texto seleccionado por múltiples cursores a un nuevo buffer

9

Digamos que queremos matar la región seleccionada por todos los cursores en múltiples cursores, y tirarlo todo a un nuevo búfer vacío. ¿Cómo se hace eso con múltiples cursores?

Tenga en cuenta que una simple copia y pegado del texto en el nuevo búfer no funciona, ya que solo tira de la región desde el primer cursor (como se informa aquí ).

Nota: Esta pregunta está motivada por la respuesta y el problema presentado en: Mantener solo las líneas con los cursores en múltiples cursores

Amelio Vazquez-Reina
fuente

Respuestas:

9

Una vez que el texto ha sido eliminado, salga del cursor múltiple ( enter) y mientras está en el nuevo golpe de búfer C-x r y(normalmente el texto eliminado está en el anillo de eliminación del rectángulo)

Lompik
fuente
3
Después de miles de veces sin poder tirar de todas las cosas muertas, me siento frustrado al descubrir que uno DEBE salir del cursor múltiple para hacer el C-x r ytrabajo. :(
stackunderflow
El texto eliminado en la primera vez persiste de alguna manera, ¿hay algo como un "caché" que necesito borrar? ¡Gracias!
benjaminz
1
Considero que esta solución es un truco feo.
dev1223
0

Prueba esto. Simplemente seleccione texto usando múltiples cursores y presione Cc. Al igual que en cualquier otro editor normal en estos días.

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

Tenga en cuenta que la dependencia de la biblioteca s está presente. Además, este código espera que use el modo CUA. De lo contrario, debe personalizar la definición de consejos en la parte inferior.

dev1223
fuente