Pergunta sobre text-alignment, emacs – Alinhar o texto à direita no Emacs

6

Às vezes, eu tenho um arquivo de texto como este no Emacs:

some text     123     17
other text    1       0
still more    12      8
last one      1234    123

Eu gostaria decerto-alinhar os números (usando espaços), mudando para algo como isto:

some text      123     17
other text       1      0
still more      12      8
last one      1234    123

Como isso pode ser feito no Emacs?

table-mode, org-mode não é necessário aqui, embora geralmente muito útil High Performance Mark
No final eu prefiro umrect Sediadasolução. Michel de Ruiter
modo-org e uma tabela? Reactormonk

Sua resposta

1   a resposta
11

align-regexp posso fazer isso. Marque a região e use:

C-uM x align-regexp RET \(\s-+[0-9]*\)[0-9] RET -1 RET 4 RET y

Essa deve ser a abordagem mais simples.

(Editar: Na verdade, você nem precisa separar esse dígito final;\(\s-+[0-9]+\) funciona tão bem para o regexp.)

Veja os prompts interativos eCHf align-regexp RET e aalign-rules-list variável para o que está realmente fazendo.

A parte notável é que, especificando um número negativo para o grupo,align-regexp define ojustify atributo:

`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, as várias opções de edição de tabela também podem lidar com isso (por exemplo, org, ses, table-capture / release), ou você poderia fazê-lo com um padrão de substituição elisp.

por exemplo. O seguinte deve fazer mais ou menos o que você está procurando, desde que o arquivo já esteja usando espaços para o alinhamento (você pode usaruntabify para remover as abas se não), e que todas as linhas têm o mesmo comprimento (ou seja, espaços à direita são necessários em algumas linhas se a coluna final for de comprimento variável).

CM-% \([0-9]+\)\([[:space:]]+\) RET \,(format (concat "%" (number-to-string (1- (length \&))) "d ") (string-to-number \1)) RET

Eu apenas me diverti olhando para isso, vendo espaços não brancos no grupo de alinhamento doalign-regexp padrão, e pensando "Oh não, o que eu escrevi aqui?" antes de ler minha própria explicação de porque isso estava bem :) (Obviamente a justificação não é uma característica que eu usei regularmente!) phils

Perguntas relacionadas