2011-09-20 52 views
8

我曾經使用過的唯一一個支持這個的編輯器(但是我確信很多都是這樣)是Sublime Text 2,但是希望emacs也有一個技巧。我所處理的一些類具有相當的聲明性語法,如果源保持列化,則看起來更乾淨。當新行增加一列或兩列的長度時,問題就出現了......然後你必須通過每一行重新對齊它。Emacs:對齊文本,但不是整行?

截圖可能澄清什麼,我在得到:

Columnized text out of alignment

在這裏,我添加了一行,如果它的列延伸到比其他列進一步其中之一,所以我想重新調整一遍。通常我會重複循環我的手指繞着箭頭和空格鍵,直到我逐行重新排列所有內容,但如果有一種方法可以選擇矩形區域並強制該區域的文本非空白部分落入對齊。

這可能嗎?

+3

哈! ___編輯器確實x,Emacs能做x嗎?除非X是水平滾動條,否則答案可能是肯定的。 ;) –

回答

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)) 

然後選擇區域和的Mx我-ALIGN-後逗號

+0

這是一個巧妙的把戲! –

+0

正則表達式中的'-'是什麼? – lmichelbacher

+1

'\ s-'意思是Emacs regexp中的空格(它實際上是一個語法類,如果您真的感興趣,請參閱手冊) – scottfrazer

4

Emacs也讓您選擇矩形區域,而且它讓你編輯整列。要刪除矩形區域,請將標記設置在一個角上,指向另一個角點,然後點M-x kill-rectangle。您可以通過相同的方式添加一個空白的矩形,然後M-x open-rectangle

這僅僅是知道如何做到這一點的方式;無疑還有其他更好的方法。

+0

感謝您的迴應。我想將列(在本例中)向右移動一個空格,而不是將其刪除。當我設置標記(假設你的意思是C空間),然後將點移動到另一個角落,似乎選擇標記和點之間的整條線? – d11wtq

+0

對不起,在打字時錯過了編輯,讓我們看看會發生什麼,謝謝! :) – d11wtq

+0

令人驚歎的,謝謝! :) – d11wtq

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