Emacs:对齐文本,但不是整行?

时间:2011-09-20 12:17:58

标签: emacs indentation

我曾经使用的唯一一个支持这个的编辑器(我确定很多人都这样做)是Sublime Text 2,但希望emacs也有一个技巧。如果源保持列化,我工作的一些类具有相当声明的语法看起来更干净。当一个新行将列的长度增加一两个空格时,问题就出现了......然后你必须处理每一行重新对齐它。

屏幕截图可能会澄清我的目标:

Columnized text out of alignment

这里我添加了一行,如果它的列比其他列延伸得更远,那么我想再次重新调整它。通常我只是在箭头和空格键周围重复循环,直到我逐行重新排列所有内容,但是如果有一种方法可以选择一个矩形区域并强制它会很好将该区域的非空白部分文本对齐。

这可能吗?

3 个答案:

答案 0 :(得分:21)

您可以使用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-逗号

答案 1 :(得分:5)

还有columnize library可以改变这个:

(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

答案 2 :(得分:4)

Emacs确实允许您选择矩形区域,它可以让您编辑整列。要删除矩形区域,请在一个角上设置标记,指向另一个角,然后M-x kill-rectangle。您可以通过以相同的方式标记空白矩形,然后M-x open-rectangle

这就是 I 知道如何做到这一点的方式;毫无疑问,其他可能更好的方式。