Frage an text-alignment, emacs – Richten Sie den Text in Emacs mit der rechten Maustaste aus

6

Manchmal habe ich eine Textdatei wie diese in Emacs:

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

Ich würde gerneRecht- Richten Sie die Zahlen (mit Leerzeichen) so aus, dass sie etwa so aussehen:

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

Wie geht das in Emacs?

Am Ende bevorzuge ich arect basierendLösung. Michel de Ruiter
org-mode und eine tabelle? Reactormonk
table-mode, org-mode hier nicht notwendig, aber generell sehr nützlich High Performance Mark

Deine Antwort

1   die antwort
11

align-regexp kann dies tun. Markieren Sie die Region und verwenden Sie dann:

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

Das sollte der einfachste Ansatz sein.

(Bearbeiten: Tatsächlich müssen Sie diese letzte Ziffer nicht einmal trennen.\(\s-+[0-9]+\) funktioniert genauso gut für den regulären Ausdruck.)

Siehe die interaktiven Eingabeaufforderungen undCHf align-regexp RET und dasalign-rules-list Variable für das, was das eigentlich tut.

Der bemerkenswerte Teil ist, dass durch die Angabe einer negativen Zahl für die Gruppe,align-regexp setzt diejustify Attribut:

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

Alternativ können die verschiedenen Optionen zum Bearbeiten von Tabellen auch dies berücksichtigen (z. B. org, ses, table-capture / release), oder Sie können dies mit einem Elisp-Ersetzungsmuster tun.

z.B. Das Folgende sollte mehr oder weniger das tun, wonach Sie suchen, vorausgesetzt, die Datei verwendet bereits Leerzeichen für die Ausrichtung (Sie können verwendenuntabify um die Tabulatoren zu entfernen, wenn nicht) und dass alle Zeilen die gleiche Länge haben (d. h. in einigen Zeilen werden nachgestellte Leerzeichen benötigt, wenn die letzte Spalte unterschiedlich lang ist).

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

Ich hatte nur Spaß daran, wenn ich zurückblickte und in der Ausrichtungsgruppe von Nicht-Leerzeichen sahalign-regexp Muster und denken "Oh nein, was habe ich hier geschrieben?" bevor ich meine eigene Erklärung darüber lese, warum das in Ordnung war :) (Rechtfertigung ist offensichtlich keine Funktion, die ich regelmäßig verwendet habe!) phils

Verwandte Fragen