2011-09-20 14 views
8

El único editor que he usado que lo soporta (estoy seguro que sí lo es, sin embargo) es Sublime Text 2, pero afortunadamente emacs también tiene un truco bajo la manga. Algunas clases en las que trabajo que tienen una sintaxis bastante declarativa parecen más limpias si la fuente se mantiene en columnas. El problema aparece cuando una nueva fila aumenta la longitud de una columna por un espacio o dos ... luego debe trabajar en cada fila para alinearla nuevamente.Emacs: alinea el texto, pero no toda la línea?

Una captura de pantalla, probablemente, aclara lo que yo quiero llegar:

Columnized text out of alignment

Aquí He añadido una fila en la que uno si sus columnas se extiende más allá de las otras columnas, por lo que me gustaría realinear todo de nuevo. Normalmente, repetiría: pasar los dedos alrededor de las flechas y la barra espaciadora hasta que haya vuelto a alinear todo fila por fila, pero sería bueno si hubiera una forma de seleccionar un área rectangular y forzar texto las partes no blancas del área para alinearse.

¿Esto es posible?

+3

Ja! ___ editor hace x, ¿puede Emacs hacer x? A menos que X sea una barra de desplazamiento horizontal, la respuesta probablemente sea sí. ;) –

Respuesta

21

En lugar de usar rectángulos, puede usar align-regexp. Seleccionar el área a continuación, hacer:

C-u M-x align-regexp RET ,\(\s-*\) RET 1 RET 1 RET y

Si hace esto mucho, crear una función:

(defun my-align-after-commas (beg end) 
    (interactive "r") 
    (align-regexp beg end ",\\(\\s-*\\)" 1 1 t)) 

A continuación, seleccione la zona y Mx mi-align-después-comas

+0

¡Eso es un buen truco! –

+0

¿Para qué es el '-' en la expresión regular? – lmichelbacher

+1

'\ s-' significa espacios en blanco en Emacs regexp (en realidad es una clase de sintaxis, consulte el manual si está realmente interesado) – scottfrazer

4

Emacs le permite seleccionar áreas rectangulares, y le permite editar columnas enteras. Para eliminar un área rectangular, establezca la marca en una esquina, apunte a la otra y luego M-x kill-rectangle. Puede agregar un rectángulo de espacios en blanco marcándolo de la misma manera, y luego M-x open-rectangle.

Así es como I saben cómo hacerlo; sin duda hay otras formas, posiblemente mejores.

+0

Gracias por la respuesta. Quiero cambiar la columna (en este caso) un espacio a la derecha, no eliminarlo. Cuando establezco la marca (suponiendo que te refieres al espacio en C) y luego muevo el punto a la otra esquina, parece seleccionar líneas enteras entre la marca y el punto? – d11wtq

+0

Lo sentimos, perdimos su edición mientras escribía, veamos qué pasa, ¡gracias! :) – d11wtq

+0

Increíble, gracias! :) – d11wtq

5

También está el columnize library que puede transformar esto:

(defvar enform-keywords-statements 
    '("AT END" "AT START" "CLOSE" "DECLARE" "DELINK" "DICTIONARY"  
    "EXIT" "FIND" "FOOTING" "LINK" "LIST" "OPEN" "PARAM" "SET"    
    "SUBFOOTING" "SUBTITLE" "TITLE") 
    "List of ENFORM statement keywords. Used to create the `font-lock-keywords' table.") 

en esto:

(defvar enform-keywords-statements 
    '("AT END"  "AT START" "CLOSE"  "DECLARE"  "DELINK"  
    "DICTIONARY" "EXIT"  "FIND"  "FOOTING"  "LINK"   
    "LIST"  "OPEN"  "PARAM"  "SET"   "SUBFOOTING" 
    "SUBTITLE" "TITLE"  ) 
    "List of ENFORM statement keywords. Used to create the `font-lock-keywords' table.") 

selecciona la región que desea alinear y luego M-x columnize-text.

página EmacsWiki en este y otros:
http://www.emacswiki.org/emacs/CategoryAlignment

Cuestiones relacionadas