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

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)


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.