Emacs: выравнивать текст, но не всю строку? - PullRequest
8 голосов
/ 20 сентября 2011

Единственный редактор, который я когда-либо использовал, который поддерживает это (я уверен, что многие это делают), это Sublime Text 2, но, надеюсь, у emacs тоже есть хитрость. Некоторые классы, над которыми я работаю, имеют довольно декларативный синтаксис, который выглядит чище, если источник хранится в столбцах. Проблема возникает, когда новая строка увеличивает длину столбца на один или два пробела ... затем вам нужно проработать каждую строку, чтобы выровнять ее.

Снимок экрана, вероятно, проясняет, к чему я клоню:

Columnized text out of alignment

Здесь я добавил строку, в которой один, если его столбцы простираются дальше, чем другие столбцы, так что я бы хотел снова все перестроить. Обычно я просто повторял бы циклически мои пальцы вокруг стрелок и пробела, пока я не выровнял все по строкам, но было бы хорошо, если бы был способ просто выбрать прямоугольную область и силу текстовые части этой области, не содержащие пробелов, для выравнивания.

Возможно ли это?

Ответы [ 3 ]

21 голосов
/ 20 сентября 2011

Вместо использования прямоугольников вы можете использовать align-regexp. Выберите область, затем выполните:

C-u M-x align-regexp RET ,\(\s-*\) RET 1 RET 1 RET y

Если вы делаете это много, сделайте функцию:

(defun my-align-after-commas (beg end)
  (interactive "r")
  (align-regexp beg end ",\\(\\s-*\\)" 1 1 t))

Затем выберите область и M-x my-align-after-commas

5 голосов
/ 21 сентября 2011

Существует также библиотека колонок , которая может преобразовать это:

(defvar enform-keywords-statements
  '( "AT END"  "AT  START" "CLOSE" "DECLARE" "DELINK" "DICTIONARY"     
     "EXIT" "FIND" "FOOTING" "LINK" "LIST" "OPEN" "PARAM" "SET"            
     "SUBFOOTING" "SUBTITLE" "TITLE" )
  "List of ENFORM statement keywords. Used to create the `font-lock-keywords' table.")

в это:

(defvar enform-keywords-statements
  '( "AT END"      "AT  START"   "CLOSE"       "DECLARE"     "DELINK"      
     "DICTIONARY"  "EXIT"        "FIND"        "FOOTING"     "LINK"        
     "LIST"        "OPEN"        "PARAM"       "SET"         "SUBFOOTING"  
     "SUBTITLE"    "TITLE"        )
  "List of ENFORM statement keywords. Used to create the `font-lock-keywords' table.")

Вы выбираете область, которую хотите выровнять, а затемM-x columnize-text.

Страница EmacsWiki по этому и другим адресам:
http://www.emacswiki.org/emacs/CategoryAlignment

4 голосов
/ 20 сентября 2011

Emacs позволяет вам выбирать прямоугольные области и редактировать целые столбцы. Чтобы удалить прямоугольную область, установите метку в одном углу, укажите в другом, а затем M-x kill-rectangle. Вы можете добавить прямоугольник пробела, пометив его таким же образом, а затем M-x open-rectangle.

Это просто способ, которым I знает, как это сделать; Есть, несомненно, другие, возможно, лучшие способы.

...