multiple-cursors – Mantener solo las líneas con los cursores en cursores múltiples

Pregunta:

Digamos que tenemos un archivo con varios cursores. No todas las líneas tienen cursores, pero cada cursor está en una línea diferente.

¿Cómo puedo eliminar todas las líneas sin cursores? No pude encontrar un solo comando mc para esto, pero ¿tal vez todavía hay una manera de hacerlo con los otros comandos?

Respuesta:

La siguiente función crea solo mensajes, en lugar de eliminar nada. Si este enfoque parece atractivo, entonces (message "No real or fake cursor here: %s" line) se puede sustituir por (kill-region pbol peol) para eliminar la línea y colocarla en el anillo de muerte. Si el usuario también desea eliminar \n al final de la línea, utilice (kill-region pbol (1+ peol)) . La sección de código (message "MC exists: %s" line) se puede reemplazar con nil para que la función sea silenciosa en su operación. Esta función solo debe ejecutarse una vez, por lo que se agrega a la lista de mc--default-cmds-to-run-once .

(defun mc/kill-all-lines-without-cursors ()
"Kill all lines that do not have fake or real cursors."
(interactive)
  (let* (
      mc
      line
      pbol
      peol
      (starting-line (line-number-at-pos))
      (my-list
        (mapcar
          (lambda (x)
            (cons (mc/cursor-beg x) (mc/cursor-end x)))
          (mc/all-fake-cursors))))
    (save-excursion
      (goto-char (point-max))
      (catch 'done
        (while t
          (setq line (line-number-at-pos))
          (setq mc nil)
          (setq pbol (point-at-bol))
          (setq peol (point-at-eol))
          (catch 'found
            (mapcar
              (lambda (x)
                (when
                  (or
                    (and
                      (>= (car x) pbol)
                      (<= (car x) peol))
                    (and
                      (>= (cdr x) pbol)
                      (<= (cdr x) peol)))
                  (setq mc t)
                  (throw 'found (message "MC exists:  %s" line))))
              my-list))
          (unless (or mc (= line starting-line))
            (message "No real or fake cursor here:  %s" line))
          (when (= 1 line) (throw 'done nil))
          (re-search-backward "\n" nil t))))))

(add-to-list 'mc--default-cmds-to-run-once 'mc/kill-all-lines-without-cursors)

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım