2011-09-20 19 views
8

L'unico editor che abbia mai usato supporta questo (sono sicuro che molti lo fanno, comunque) è Sublime Text 2, ma si spera che emacs abbia anche un trucco. Alcune classi su cui ho lavorato hanno una sintassi abbastanza dichiarativa più pulita se la fonte viene mantenuta in colonna. Il problema arriva quando una nuova riga aumenta la lunghezza di una colonna di uno spazio o due ... devi quindi lavorare su ogni riga per riallinearla.Emacs: allinea il testo, ma non l'intera linea?

Uno screenshot probabilmente chiarisce che cosa voglio dire:

Columnized text out of alignment

Qui ho aggiunto una riga in cui uno se le sue colonne si estende oltre le altre colonne, quindi mi piacerebbe riallineamolo di nuovo. Di solito, ripeto, ciclo le dita intorno alle frecce e alla barra spaziatrice fino a quando non mi sono allineato di nuovo fila per fila, ma sarebbe bello se ci fosse un modo per selezionare solo un'area rettangolare e forzare testo di parti non bianche di quell'area per cadere in allineamento.

È possibile?

+3

Hah! ___ editor fa x, può Emacs fare x? A meno che X non sia una barra di scorrimento orizzontale, la risposta è probabilmente sì. ;) –

risposta

21

Invece di utilizzare i rettangoli, è possibile utilizzare align-regexp. Selezionare l'area poi fare:

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

Se si esegue questa operazione molto, fanno una funzione:

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

quindi selezionare l'area e Mx my-align-dopo-virgole

+0

Questo è un trucco eccellente! –

+0

Qual è il '-' per il regexp? – lmichelbacher

+1

'\ s-' significa spazi bianchi in regexp di Emacs (in realtà è una classe di sintassi, vedi il manuale se sei veramente interessato) – scottfrazer

4

Emacs consente di selezionare aree rettangolari e consente di modificare intere colonne. Per eliminare un'area rettangolare, impostare il segno su un angolo, puntare sull'altro e quindi su M-x kill-rectangle. È possibile aggiungere un rettangolo di spazi bianchi contrassegnandolo allo stesso modo, quindi M-x open-rectangle.

Questo è il modo in cui I sa come fare questo; ci sono senza dubbio altri modi, forse migliori.

+0

Grazie per la risposta. Voglio spostare la colonna (in questo caso) uno spazio a destra, non cancellarlo. Quando imposto il segno (supponendo che tu intenda lo spazio C), quindi sposti il ​​punto nell'altro angolo, sembra che selezioni intere linee tra il segno e il punto? – d11wtq

+0

Siamo spiacenti, ho perso la modifica mentre stavo scrivendo, vediamo cosa succede, grazie! :) – d11wtq

+0

Incredibile, grazie! :) – d11wtq

5

C'è anche il columnize library che può trasformare questo:

(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.") 

in questo:

(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.") 

si seleziona la regione che si desidera allineare e poi M-x columnize-text.

pagina EmacsWiki su questo e altri:
http://www.emacswiki.org/emacs/CategoryAlignment

Problemi correlati