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-regionbastante 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-regiona 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-regiones atmenos que lo personalice con algún otro valor.Puede usar
M-yafterC-ypara 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-regionpara 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-letfpuede 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-wordllamakill-regiony se reemplaza condelete-region).cl-letf.cl-letffunciona 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-regioncondelete-regionyforward-wordparabackward-word. De esta manera REALMENTE no afecta alkill-ring, a diferencia de otras situaciones en las que, fuera de emacs, noté quekill-ringestaba 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-wAntecedentes 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-wen emacs para " eliminar "la región de texto que quiero reemplazar, con la esperanza de que más tardeM-wpueda 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-yfuente
Aquí hay una versión de
kill-regioneso 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-wque antes, peroC-u C-wahora elimina el texto sin cambiar el anillo de muerte.fuente
la
delete-regionfunció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