2012-01-21 10 views

Respuesta

12

poner esto en su .emacs

(defun kill-line-or-region() 
"kill region if active only or kill line normally" 
    (interactive) 
    (if (region-active-p) 
     (call-interactively 'kill-region) 
    (call-interactively 'kill-line))) 

    (global-set-key (kbd "C-k") 'kill-line-or-region) 
+0

Esto no funciona si primero abre un archivo y la marca nunca se establece. – asmeurer

+0

OK, la solución es simplemente no usar '(interactivo" r ")', sino simplemente '(interactivo)'. Editaré tu respuesta. – asmeurer

5

Esto suena como un trabajo para el consejo!

(defadvice kill-line (around kill-region-if-active activate) 
    (if (and (called-interactively-p) (region-active-p)) 
     (kill-region (region-beginning) (region-end)) 
    ad-do-it)) 

EDITAR: Agregado called-interactively-p check.

+0

hmm .. Me gusta el tuyo. :/ – kindahero

+3

Woooo! ¡Espera! 'kill-line' es un uso de muchas funciones del paquete interno, esto cambiará la forma en que se comportan, de manera muy sutil. Pondré mi dinero en la solución @kindahero, ya que hará lo que me pides sin los desagradables efectos secundarios. – Lindydancer

+0

OK, entonces, ¿qué tal si agrego un cheque de interactividad, como se agregó anteriormente? – Sean

0

Esto no es realmente una respuesta directa sino algunas pistas.

Puede habilitar delete-selection-mode con (delete-selection-mode 1). Luego, si se marca una región, cuando empiece a escribir texto, la región se eliminará. Pero en su caso, simplemente podría usar C-w para cortar la región actual, esto agregará la región al anillo de la muerte, pero kill-line también lo hará.

Cuestiones relacionadas