align-regexp
puede hacer esto. Marca de la región, y luego usar:
C-uM-xalign-regexp
RET\(\s-+[0-9]*\)[0-9]
RET-1
RET4
RETy
Ese debe ser el enfoque más simple.
(Editar: De hecho, usted ni siquiera necesita para separar ese dígito final; \(\s-+[0-9]+\)
funciona igual de bien para la expresión regular.)
Ver los mensajes interactivos y Chfalign-regexp
RET y la variable align-rules-list
por lo que realmente está haciendo.
La parte notable es que mediante la especificación de un número negativo para el grupo, align-regexp
establece el atributo justify
:
`justify'
It is possible with `regexp' and `group' to identify a
character group that contains more than just whitespace
characters. By default, any non-whitespace characters in
that group will also be deleted while aligning the
alignment character. However, if the `justify' attribute
is set to a non-nil value, only the initial whitespace
characters within that group will be deleted. This has
the effect of right-justifying the characters that remain,
and can be used for outdenting or just plain old right-
justification.
Alternativamente, las diversas opciones de edición de mesa también pueden tratar con esto (por ejemplo, org, ses, mesa -capture/release), o puede hacerlo con un patrón de reemplazo elisp.
p. Ej. Lo siguiente debería hacer más o menos lo que está buscando, siempre que el archivo ya esté usando espacios para la alineación (puede usar untabify
para eliminar las pestañas si no), y que todas las líneas tienen la misma longitud (es decir, los espacios finales son necesario en algunas líneas si la columna final es de longitud variable).
C-M-%\([0-9]+\)\([[:space:]]+\)
RET\,(format (concat "%" (number-to-string (1- (length \&))) "d ") (string-to-number \1))
RET
org-mode y una mesa? – Reactormonk
table-mode, org-mode no es necesario aquí, aunque generalmente es muy útil –
Al final prefiero una solución basada en 'rect' [solución] (http://stackoverflow.com/a/10916207/357313). –