2010-10-04 10 views
6

Me gusta el TextMate que puede seleccionar una línea para moverlo con una simple pulsación de tecla.seleccione una línea para moverlo con emacs

 
Command-shift L (select a line) 
Control-Command Arrow(up and down) (move the selected line) 

¿Cómo puedo hacer lo mismo con emacs?

Respuesta

7

SO usuario, Sanityinc desarrollaron move-text.el (un extracto de de-edit-toolkit.el básica - por emakswiki regular, Andy Stewart (lazycat))

Ver: Move line/region up and down in emacs

Lo hace esta tarea muy bien ...

M-Up o M-Down para mover la línea actual (o líneas enteras de la región marcada.)

Lo he agregado a http://www.emacswiki.org/emacs/MoveText

Edite las fijaciones en la parte inferior según sus preferencias.

6

Simplemente elimino la línea y luego la vuelvo a extraer en la nueva ubicación. C-a C-k C-k (muévase a una nueva ubicación) C-y

+0

+1. Yo hago lo mismo, excepto que tengo un set de matar toda la línea. ¡Un golpe de tecla menos! – Bahbar

+2

Realmente no entiendo cómo una respuesta "no, no hagas eso, yo hago esto" obtiene +5. – ocodo

+1

@Bahbar - C-S-Backspace está destinado a matar-línea completa de forma predeterminada. – ocodo

4

move-line hace eso, excepto por el resaltado, que debe ser razonablemente fácil de agregar.

4

El comando estándar C-x C-t está vinculado a transpose-lines. Esto es útil para transportar líneas por intercambio de varias maneras.

Lo más obvio es que intercambia la línea con la línea anterior.

Con un argumento de 0 (es decir, M-0 C-x C-t), intercambia la línea que tiene la marca con la línea que tiene el punto.

+0

@ user377089: ¿Cómo se establece la marca en emacs? Uso C-SPACE y C-g para establecer una marca. – prosseek

+1

@ prosseek- 'C-SPACE C-SPACE'.Básicamente, presione 'C-SPACE' dos veces como si estuviera alternando. La primera vez que se establece y activa la marca en la línea actual. Luego, la segunda vez que se desactiva la marca, se establece en la línea actual. –

+0

Eso es útil. Utilizo poco las líneas de transposición, y no me di cuenta de que funcionaba con la marca de esa manera. –

0

bbatsov's prelude (una especie de kit de inicio Emacs) incluye esta funcionalidad (ver this section of code):

(defun prelude-move-line-up() 
    "Move the current line up." 
    (interactive) 
    (transpose-lines 1) 
    (forward-line -2) 
    (indent-according-to-mode)) 

y se une a M-S-up y M-S-abajo.

Cuestiones relacionadas