Вопрос по – Выровнять текст по правому краю в Emacs

6

Иногда в Emacs у меня есть такой текстовый файл:

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

я бы хотелrightВыровняйте числа (используя пробелы), изменив их на что-то вроде этого:

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

Как это можно сделать в Emacs?

орг-режим и стол? Reactormonk
В конце концов, я предпочитаюrect на основаниирешени. Michel de Ruiter
table-mode, org-mode здесь не нужен, хотя обычно очень полезен High Performance Mark

Ваш Ответ

1   ответ
11

align-regexp могу это сделать. Отметьте регион, а затем используйте:

C-у M-х align-regexp RET \(\s-+[0-9]*\)[0-9] RET -1 RET 4 RET y

Это должен быть самый простой подход.

(Редактировать На самом деле, вам даже не нужно выделять эту последнюю цифру;\(\s-+[0-9]+\) работает так же хорошо для регулярного выражения.)

Смотрите интерактивные подсказки и C-чf align-regexp RET иalign-rules-list переменная для того, что на самом деле делает.

Примечательно, что, указав отрицательное число для группы,align-regexp устанавливает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.

В качестве альтернативы различные варианты редактирования таблиц также могут иметь дело с этим (например, org, ses, захват / выпуск таблиц), или вы можете сделать это с помощью шаблона замены elisp.

например. Следующее должно делать более или менее то, что вы ищете, при условии, что файл уже использует пробелы для выравнивания (вы можете использоватьuntabify для удаления вкладок, если нет), и что все строки имеют одинаковую длину (т. е. в некоторых строках нужны конечные пробелы, если последний столбец имеет переменную длину).

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

Я просто повеселился, оглядываясь назад, видя непробельные символы в группе выравниванияalign-regexp шаблон, и подумал: «О нет, что я здесь написал ?!» прежде чем прочитать мое собственное объяснение, почему это было хорошо :) (Очевидно, оправдание - это не та функция, которую я регулярно использовал!) phils

Похожие вопросы