2010-09-24 14 views
11

Algo que hago a menudo en Emacs es cortar un poco de texto, y luego reemplazar otro bit con el texto cortado. Entonces, digamos que tengo el texto que quiero tirar como el último artículo en mi kill-ring. Lo arrastro al nuevo lugar y luego elimino el texto que ya estaba allí. Pero ahora el texto eliminado es el último elemento en el kill-ring. Así que la próxima vez que quiera tirar el primer artículo, tengo que hacer C-y M-y. Entonces la próxima vez hay dos elementos más recientes en el kill-ring, entonces tengo que hacer C-y M-y M-y, y así sucesivamente.¿Puedo guardar el mismo artículo para los yanks en Emacs?

Supongo que hay una mejor manera de hacerlo. Alguien puede iluminarme, por favor?

+0

No tengo conocimiento de ninguna otra forma de hacerlo. Es posible que pueda guardar en un registro, pero yo no lo he usado. – cristobalito

+0

Has encontrado un problema clave con el kill-ring. El artículo usado más recientemente es más probable que se reutilice. Entonces no quieres ordenar el anillo cronológicamente. Ingresa mi paquete LRU-yank. https://github.com/lewang/le_emacs_LRU_yank Saco cosas útiles con menos teclas presionadas con él. –

Respuesta

6

Debe usar delete-region en lugar de kill-region.

delete-region borra la región sin ponerla en el anillo de muerte. Está vinculado a <menu-bar> <edit> <clear> de forma predeterminada.

Si sólo desea utilizar enlaces predeterminados sin utilizar el menú, se puede usar con delete-rectangleC-xrd pero funciona en rectángulo. Podría estar bien usarlo en una sola línea como delete-region.

+0

Gracias. Estoy buscando una manera de hacerlo sin tener que hacer 'M-x kill-region' cada vez, y prefiero no agregar una nueva clave. ¿No hay forma de hacer esto con combinaciones de teclas estándar? – Skilldrick

+0

Puede hacer una consulta-reemplazar (M-%) tirando en el minibúfer lo que quiere usar para reemplazar otras cosas: M-% thestringtoreplace RET C-y RET! –

+0

@ Jérôme Sí, creo que tienes razón. El único problema con eso es que la cadena reemplazada debe ser la misma cada vez, mientras que me gustaría poder reemplazar manualmente una carga de cosas diferentes con la misma cadena. Creo que esto es mucho más fácil de hacer con los editores de texto estándar (es decir, usar Ctrl-C y Ctrl-V) que con Emacs. – Skilldrick

2

escribí esta función para hacer estallar la más reciente de la anillo de corte:

(defun my-kill-ring-pop() 
    "Pop the last kill off the ring." 
    (interactive) 
    (when kill-ring 
    (setq kill-ring (cdr kill-ring))) 
    (when kill-ring-yank-pointer 
    (setq kill-ring-yank-pointer kill-ring)) 
    (message "Last kill popped off kill-ring.")) 

Así que después mato algo que no quiero seguir, pulsar las teclas que llama a esto.

+0

Gracias - eso es algo útil que tener. – Skilldrick

+0

¿A qué lo vinculaste, por curiosidad? – drysdam

+0

@drysdam C-c k scottfrazer

9

varias alternativas:

  1. Encienda delete-selection-mode, y utilizar C-d o eliminar eliminar región sin tocar el anillo de corte.
  2. Uso C-x r s i para guardar el texto para registrar i, y más tarde, C-x r i i para insertar el texto guardado.
  3. Si el patrón de los textos que se reemplazarán se puede capturar en una expresión regular, use query-replace-regexp (C-M-%).
+0

Agradable, gracias. ¿Hay algún punto en el que puedas dejar de aprender Emacs? – Skilldrick

+0

En este escenario, uso registros. ¡A menudo son útiles ya que puedes tener varios de ellos! – user272735

4

Uno de los secretos más antiguos y mejor guardados en Emacs - sé por qué: Emacs tiene un selección secundaria.

Y esto es exactamente para lo que sirve. Guarda otra selección de texto para que uses una y otra vez.

Seleccione un texto, luego jale el secundario para reemplazarlo. Repita en otro lugar. A menudo, esto es más conveniente, flexible y preciso que algo como el reemplazo de consultas.

favor, eche un vistazo, por su propio bien - tal vez va a dejar de ser una característica tan poco conocido ... http://www.emacswiki.org/emacs/SecondarySelection

0

relación a esto es M-x browse-kill-ring.Si usa M-x anything, también puede usar M-x anything-show-kill-ring.

Cuestiones relacionadas