Me gustaría eliminar un poco de texto para poder tirar de otro texto en lugar de él. ¿Cómo puedo hacer eso? Cw corta el texto seleccionado para matar el anillo y termino sin el texto que quería tirar.
Además, ¿es posible tirar de texto directamente en lugar de texto sin siquiera presionar botones para eliminarlo?
Respuestas:
Escribo con
M-x delete-region
bastante frecuencia, pero puedes vincularlo a una tecla.Con el modo de eliminación de selección en las versiones más recientes de Emacs, no tiene que escribir un comando, simplemente comience a escribir:
fuente
delete-region
a una clave porque Backspace lo hace ahora. Retroceso elimina la región seleccionada en lugar de matarla, en otras palabras, Retroceso borra el texto seleccionado sin guardarlo / empujarlo al círculo de la muerte. Esto se debe a que el valor dedelete-active-region
es at
menos que lo personalice con algún otro valor.Puede usar
M-y
afterC-y
para insertar el elemento anterior del kill ring, o usar el paquete Browse-kill-ring .En cuanto a la segunda pregunta, consulte DeleteSelectionMode .
fuente
Tuve el mismo problema. Lo más cercano que tengo hasta ahora es hacer una pequeña función que es esencialmente:
(defun ruthlessly-kill-line () "Deletes a line, but does not put it in the kill-ring. (kinda)" (interactive) (move-beginning-of-line 1) (kill-line 1) (setq kill-ring (cdr kill-ring)))
fuente
Tomado del EmacsWiki :
fuente
Mx eval-expression (setq kill-ring (cdr kill-ring)) - elimina el último elemento de kill-ring
fuente
Para su segunda pregunta, como alternativa a DeleteSelectionMode , puede habilitar el modo CUA, que además le brinda un bonito modo de selección de rectángulo habilitado por C-Return. El modo CUA es parte de emacs desde 22.1.
fuente
Encontré una respuesta a esto.
Publíquelo primero aquí .
;; Ctrl-K with no kill (defun delete-line-no-kill () (interactive) (delete-region (point) (save-excursion (move-end-of-line 1) (point))) (delete-char 1) ) (global-set-key (kbd "C-k") 'delete-line-no-kill)
fuente
La mayoría de las funciones de eliminación se utilizan
kill-region
para realizar el trabajo real de eliminar el texto. Utilizo una macro lisp para crear funciones de eliminación de funciones de eliminación.(defmacro jpk/delete-instead-of-kill (&rest body) "Replaces `kill-region' with `delete-region' in BODY." `(cl-letf (((symbol-function 'kill-region) (lambda (beg end &optional yank-handler) (delete-region beg end)))) ,@body)) (defun jpk/delete-word (arg) "Like `kill-word', but does not save to the `kill-ring'." (interactive "*p") (jpk/delete-instead-of-kill (kill-word arg)))
fuente
cl-letf
puede crear un enlace local de una función con alcance dinámico. Eso significa que solo tiene efecto para el código dentro decl-letf
, pero se aplica a todo el árbol de llamadas (por ejemplokill-region
, no aparece directamente enbody
, perokill-word
llamakill-region
y se reemplaza condelete-region
).cl-letf
.cl-letf
funciona asílet*
en ese sentido.Técnicamente, las otras respuestas están equivocadas en la primera parte.
Aquí está mi implementación y motivación:
(defun delete-word (arg) "Delete characters backward until encountering the beginning of a word. With argument ARG, do this that many times." (interactive "p") (delete-region (point) (progn (backward-word arg) (point))))
Adapté el código aquí de "
kill-word
" ensimple.el
. Cambiékill-region
condelete-region
yforward-word
parabackward-word
. De esta manera REALMENTE no afecta alkill-ring
, a diferencia de otras situaciones en las que, fuera de emacs, noté quekill-ring
estaba influenciado.fuente
(defun copy-to-register-z (p1 p2) "Copy text selection to register named “z”." (interactive "r") (copy-to-register ?z p1 p2)) (defun replace-register-content-z (p1 p2) "Replace register named “z”'s content." (interactive "r") (delete-region p1 p2) (insert-register ?z)) (global-set-key (kbd "C-c c") 'copy-to-register-z) (global-set-key (kbd "C-c v") 'replace-register-content-z)
fuente
Agregue un equivalente de eliminación de las teclas kill-region y kill-line Cw y Ck de la siguiente manera. Vinculado a las teclas Cv y Cz.
fuente
Mi respuesta a la primera pregunta: marque el texto en emacs (usando el mouse o establezca la marca
C-SPC
) y presione el botón "<- Retroceso" en el teclado en lugar deC-w
. De esta manera, aún puede pegar texto en el portapapeles del sistema, sin preocuparse de que el portapapeles haya sido anulado por el texto eliminado porC-w
Antecedentes de esta respuesta: a veces, cuando recibía texto fuera de emacs que quiero usar para reemplazar una región en emacs, a menudo cometía un error al copiar primero ese texto en el portapapeles del sistema (es decir, en Windows
Ctrl + C
) y luego hacer unC-w
en emacs para " eliminar "la región de texto que quiero reemplazar, con la esperanza de que más tardeM-w
pueda recuperar mi texto en el portapapeles de kill-ring. Desafortunadamente, el portapapeles simplemente se anularía con el texto eliminado porC-w
, y el mensaje original en el portapapeles nunca se mostraría en kill-ring.Para la segunda pregunta, sí, siempre puede marcar el texto en emacs primero y luego directamente
C-y
fuente
Aquí hay una versión de
kill-region
eso que no fuerza valores en el círculo de la muerte.(defun kill-or-delete-region (beg end prefix) "Delete the region, storing it in the kill-ring. If a prefix argument is given, don't change the kill-ring." (interactive "r\nP") (if prefix (delete-region beg end) (kill-region beg end))) (global-set-key (kbd "C-w") 'kill-or-delete-region)
Esto le permite hacer lo mismo
C-w
que antes, peroC-u C-w
ahora elimina el texto sin cambiar el anillo de muerte.fuente
la
delete-region
función eliminará la región seleccionada sin agregarla al anillo de muerteCreo que está preguntando cómo reemplazar el texto en una región seleccionada con algo que ya ha puesto en el anillo de muerte.
La configuración
(delete-selection-mode 1)
le permitirá tirar / pegar sobre una región seleccionada. También le permite simplemente escribir y reemplazar una región seleccionada.En la versión 25.1.1 en OS XI también tuvo que agregar
(setq select-enable-primary nil)
para evitar que copiara la región seleccionada al kill ringfuente
Como complemento a todas las respuestas. Si escribe código elisp para eliminar, puede llamar a funciones que matan siempre y cuando use un objeto de anillo de muerte local como este:
(defun delete-something() "Delete something without storing in kill ring." (let (kill-ring) (kill-something)))
Utilice cualquier función que elimine algo en lugar de matar algo. La función luego se eliminará y no se recordará nada en el kill-ring real.
fuente