Pytanie w sprawie text-alignment, emacs – Wyrównaj prawy tekst w Emacs

6

Czasami mam w Emacs taki plik tekstowy:

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

chciałbymdobrze- wyrównaj liczby (używając spacji), zmieniając je w coś takiego:

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

Jak można to zrobić w Emacs?

tryb tabeli, tryb org nie jest tutaj konieczny, choć ogólnie bardzo przydatny High Performance Mark
tryb org i stół? Reactormonk
W końcu wolę arect na podstawierozwiązanie. Michel de Ruiter

Twoja odpowiedź

1   odpowiedź
11

align-regexp może to zrobić. Zaznacz region, a następnie użyj:

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

To powinno być najprostsze podejście.

(Edytować: W rzeczywistości nie musisz nawet oddzielać tej ostatniej cyfry;\(\s-+[0-9]+\) działa równie dobrze dla wyrażenia regularnego.)

Zobacz interaktywne monity iC-hf align-regexp GNIĆ ialign-rules-list zmienna dla tego, co faktycznie robi.

Warto zauważyć, że określając liczbę ujemną dla grupy,align-regexp ustawiajustify atrybut:

`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.

Alternatywnie, różne opcje edycji tabeli mogą również poradzić sobie z tym (np. Org, ses, przechwytywanie / zwalnianie tabeli) lub można to zrobić za pomocą wzoru zastępczego elisp.

na przykład Następujące czynności powinny wykonywać mniej więcej to, czego szukasz, pod warunkiem, że plik już używa spacji do wyrównania (możesz użyćuntabify aby usunąć zakładki, jeśli nie), i aby wszystkie linie były tej samej długości (tj. spacje końcowe są potrzebne w niektórych liniach, jeśli ostatnia kolumna ma różną długość).

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

Po prostu dobrze się bawiłem patrząc na to, widząc spację w grupie wyrównaniaalign-regexp wzorzec i myślenie „O nie, co tu napisałem !?” przed przeczytaniem własnego wyjaśnienia, dlaczego to było w porządku :) (Oczywiście usprawiedliwienie nie jest funkcją, z której korzystałem regularnie!) phils

Powiązane pytania