Общая функция выравнивания по правому краю

Теперь, когда я знаю, каквыровнять столбцы числовых значений по правому краю в Emacs у меня есть две проблемы с этим решением:

it is hard to remember it is not flexible

Например, он не работает, когда некоторые из значений в первом столбце содержат число.

И, к сожалению, он вставляет вкладки.

Теперь я использую функции прямоугольника (C-xrk) достаточно много. Это заставило меня задуматься: возможно ли иметь функцию, которая выравнивает по правому краю весь текст в выделенном прямоугольнике?

 Michel de Ruiter06 июн. 2012 г., 22:13
@phils Это зависит от того, могу ли я понять / запомнить, что делают прямоугольники, а не чтоalign-regexp делает.
 phils06 июн. 2012 г., 16:38
Вот как применить политику без вкладок для выравниваний:stackoverflow.com/questions/915985/…
 phils06 июн. 2012 г., 17:00
И я должен добавить, чтоalign-regexp и весьalign библиотека очень гибкая, поэтому ее нужно определить правильное регулярное выражение или правила для текущей работы.

Ответы на вопрос(1)

Решение Вопроса
(defun right-justify-rectangle (start end)
  (interactive "r")
  (apply-on-rectangle (lambda (c0 c1)
                        (move-to-column c1 t)
                        (let ((start (- (point) (- c1 c0)))
                              (end (point)))
                          (when (re-search-backward "\\S-" start t)
                            (transpose-regions start (match-end 0)
                                               (match-end 0) end))))
                      start end))

Tabнастроить переменнуюindent-tabs-mode.

Edit:

Вот версия, которая имеет дело сindent-tabs-mode более разумно:

(defun right-justify-rectangle (start end)
  (interactive "r")
  (let ((indent-tabs-mode nil))
    (apply-on-rectangle (lambda (c0 c1)
                          (move-to-column c1 t)
                          (let ((start (- (point) (- c1 c0)))
                                (end (point)))
                            (when (re-search-backward "\\S-" start t)
                              (transpose-regions start (match-end 0)
                                                 (match-end 0) end))))
                        start end))
  (when indent-tabs-mode (tabify start end)))
 06 июн. 2012 г., 17:42
Спасибо за комментарии; ответ отредактирован.
 Michel de Ruiter06 июн. 2012 г., 22:26
Вместе с(global-set-key "\C-xr\r" 'right-justify-rectangle), этоexactly что мне всегда было нужно!
 06 июн. 2012 г., 16:49
... медленно хлопать ... так много добра в этом ответеapply-on-rectangle \\S-, transpose-region.
 06 июн. 2012 г., 17:25
На самом деле, это ненадежно сindent-tabs-mode истина, так как смесь вкладок и пробелов создается в конце строки сmove-to-column может не подойти для транспонирования.
 06 июн. 2012 г., 16:51
Согласовано; очень хорошо. Вам нужно будет(require 'rect) хоть.

Ваш ответ на вопрос