2011-09-20 16 views
8

Jedyny edytor, jaki kiedykolwiek używałam, który to obsługuje (jestem pewien, że wiele z nich robi) jest Sublime Text 2, ale mam nadzieję, że emacs też ma podstęp. Niektóre klasy, nad którymi pracuję, mają dość deklaratywną składnię, która wygląda czystsza, jeśli źródło jest przechowywane w zbiorach. Problem pojawia się, gdy nowy wiersz zwiększa długość kolumny o spację lub dwie ... Następnie musisz przerobić każdy wiersz, dopasowując go ponownie.Emacs: wyrównanie tekstu, ale nie całą linię?

Zrzut ekranu prawdopodobnie wyjaśnia co mi chodzi:

Columnized text out of alignment

Tutaj dodałem wiersz, w którym jeden jeśli jej kolumny rozciąga się dalej niż w innych kolumnach, więc chciałbym ponownie ustawić to wszystko. Zazwyczaj po prostu powtarzam cyklicznie palcami wokół strzałek i spacji, dopóki nie ustawię ponownie wszystkich rzędów po rzędzie, ale byłoby dobrze, gdyby istniał sposób, aby wybrać prostokątny obszar i wymusić tekstowe spacje w tym obszarze, które nie pasują do siebie.

Czy to możliwe?

+3

Hah! ___ edytor robi x, czy Emacs może zrobić x? O ile X nie jest poziomym paskiem przewijania, odpowiedź prawdopodobnie brzmi: tak. ;) –

Odpowiedz

21

Zamiast używać prostokątów, można użyć align-regexp. Wybierz obszar, następnie zrobić:

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

Jeśli to zrobić dużo, zrobić funkcję:

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

następnie wybierz obszar i Mx my-align-po-przecinki

+0

To fajna sztuczka! –

+0

Do czego służy '-' w wyrażeniu regularnym? – lmichelbacher

+1

'\ s-' oznacza białe spacje w regexp Emacsa (w rzeczywistości jest klasą składni, patrz instrukcja, jeśli naprawdę Cię interesuje) – scottfrazer

4

Emacs umożliwia zaznaczanie prostokątnych obszarów i pozwala edytować całe kolumny. Aby usunąć prostokątny obszar, ustaw znacznik w jednym rogu, wskaż na drugim, a następnie M-x kill-rectangle. Możesz dodać prostokąt z białymi znakami, zaznaczając je w ten sam sposób, a następnie M-x open-rectangle.

To jest sposób, w jaki I wiedzieć, jak to zrobić; są niewątpliwie inne, być może lepsze sposoby.

+0

Dzięki za odpowiedź. Chcę przesunąć kolumnę (w tym przypadku) o jedno pole w prawo, a nie usunąć. Kiedy ustawiam znak (zakładając, że masz na myśli C-spację), a następnie przesuwasz punkt do drugiego rogu, wydaje się, że wybrałeś całe linie między znakiem a punktem? – d11wtq

+0

Przepraszam, ominęłem Twoją edycję, gdy pisałem, zobaczmy, co się stanie, dzięki! :) – d11wtq

+0

Niesamowite, dzięki! :) – d11wtq

5

Istnieje również columnize library, który może przekształcić to:

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

w tym:

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

wybrać obszar, który chcesz wyrównać, a następnie M-x columnize-text.

EmacsWiki strona na tym i innych:
http://www.emacswiki.org/emacs/CategoryAlignment

Powiązane problemy