tutorial mac emacs

tutorial - Emacs: ¿cómo eliminar texto sin matar el anillo?



emacs ubuntu (14)

cómo eliminar texto sin matar el anillo?

la función de delete-region eliminará la región seleccionada sin agregarla al anillo de sacrificio

Además, ¿es posible tirar directamente el texto en lugar de texto sin siquiera presionar los botones para matarlo?

Creo que estás preguntando cómo reemplazar el texto en una región seleccionada con algo que ya has puesto en el anillo de matar.

La configuración (delete-selection-mode 1) le permitirá arrastrar / 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 tenía que agregar (setq select-enable-primary nil) para evitar que copiara la región seleccionada al kill ring

Me gustaría simplemente eliminar un texto para poder extraer otro texto en lugar de hacerlo. ¿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 directamente el texto en lugar de texto sin siquiera presionar los botones para matarlo?


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

simple.el el código aquí de " kill-word " en simple.el . Cambié kill-region con delete-region y forward-word para backward-word . De esta forma, TRUELY no afecta el kill-ring , a diferencia de las otras situaciones en las que, fuera de emacs, noté que el kill-ring estaba influenciado.


Agregue un equivalente de eliminación de las claves kill-region y kill-line Cw y Ck de la siguiente manera. Encuadernado a las llaves Cv y Cz.

;; A keybinding to delete-region gives a good "Windows CUT Ctrl-x equivalent". ;; What keybinding to use is awkward to choose. ;; using C-v "Windows PASTE Ctrl-v" is quite a subversive option. ;; C-v = scroll up in emacs which I have no use for. (global-set-key (kbd "C-v") ''delete-region) ;; To have also a "Windows CUT" alternative to C-k (kill-line) this can be done: (defun delete-line () "delete line, take it out of kill ring. bind this func to C-z" (interactive) (setq last-command ''delete-line) (kill-line) (setq kill-ring (cdr kill-ring)) (setq kill-ring-yank-pointer kill-ring) (setq last-command ''delete-line) ) (global-set-key (kbd "C-z") ''delete-line) ;; without setting of last-command 2+ C-zs mess up kill-ring


Aquí hay una versión de kill-region que no fuerza los valores en el kill-ring.

(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 Cw como antes, pero Cu Cw ahora borra el texto sin cambiar el kill-ring.


Encontré una respuesta a esto.

Lo publicó primero here .

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


He tenido el mismo problema. Lo más parecido que tengo hasta ahora es solo 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)))


La mayoría de las funciones de matar utilizan kill-region para hacer el trabajo real de matar texto. Uso 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)))


Mi respuesta a la primera pregunta: marque el texto en emacs (utilizando el mouse o la marca de ajuste C-SPC ), y presione el botón "<- Retroceso" en el teclado en lugar de Cw . De esta manera, aún puede pegar sobre el texto en el portapapeles del sistema, sin preocuparse de que el portapapeles quede anulado por el texto asesinado por Cw

Antecedentes de esta respuesta: a veces, cuando obtengo texto fuera de emacs que deseo usar para reemplazar una región en emacs, a menudo cometí un error copiando primero ese texto en el portapapeles del sistema (es decir, en Windows Ctrl + C ), y luego haciendo una Cw en emacs para "borrar" la región de texto que quiero reemplazar, con la esperanza de que un Mw posterior pueda recuperar mi texto en el portapapeles de kill-ring. Desafortunadamente, el portapapeles simplemente sería anulado por el mensaje de texto asesinado por Cw , y el mensaje original en el portapapeles nunca aparecería en kill-ring.

Para la segunda pregunta, sí, siempre puedes marcar el texto en emacs primero y luego directamente en Cy


Mx eval-expression (setq kill-ring (cdr kill-ring)) - elimina el último elemento de kill-ring


Para su segunda pregunta, alternativamente a DeleteSelectionMode puede habilitar el modo CUA que además le brinda un agradable modo de selección de rectángulo habilitado por C-Return. El modo CUA es parte de emacs desde 22.1.


Puede usar My después de Cy para insertar el elemento anterior del anillo de matar, o usar el paquete browse-kill-ring .

En cuanto a la segunda pregunta, vea DeleteSelectionMode .


Tomado de EmacsWiki :

El equivalente de ''kill-line'' ( ''C-k'' ) pero sin efectos secundarios de kill-ring:

(delete-region (point) (line-end-position))


Mx delete-region bastante frecuencia, pero puede vincularlo a una clave.

Con Delete Selection Mode en las versiones más nuevas de Emacs, no tiene que escribir un comando, simplemente comience a escribir:

De manera predeterminada, la inserción de texto ocurre normalmente incluso si la marca está activa; por ejemplo, al escribir un inserta el carácter ''a'', entonces se desactiva la marca. El modo Eliminar selección, un modo menor, modifica este comportamiento: si habilita ese modo, insertar texto mientras la marca está activa hace que primero se elimine el texto en la región. Además, los comandos que normalmente eliminan solo un carácter, como Cd o DEL , eliminarán toda la región. Para alternar entre activar y desactivar el modo Eliminar selección, escriba Mx delete-selection-mode.


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