2009-04-04 9 views

Odpowiedz

9

Istnieje kilka sztuk do tego:

  • trzeba wymyślić funkcji Emacs zrobić wszystko formatowanie chcesz. indent-region jest początkiem, ale możesz także chcieć niedokwalifikować się lub coś innego.
  • należy wywoływać je w każdym pliku, a ponieważ funkcje wcięcia działają na zakresach, potrzebna jest funkcja, która ustawia znacznik do pokrycia całego pliku: mark-whole-buffer.
  • musisz wywołać EMACS na każdym pliku: oznacza to wywołanie emacsa z plikiem --batch.

Jest kilka miłych wpisów na blogu na temat tego here i here.

+0

To wygląda dobrze, dzięki! – Frank

+0

Niestety, linki do postów na blogu są już martwe. – Paul

+0

Posty na blogu działają. –

2

Uważam, że ten skrypt nie zmienia formatowania. Zamiast tego jest przykładem, jak zbudować własny „styl”, jak opisano w: CC mode manual - Styles

CC-trybie ręcznym mówi:

Jeśli chcesz sformatować starego kodu, jesteś prawdopodobnie lepiej wyłączyć za pomocą jakieś inne narzędzie, np GNU indent, który ma mocniejsze możliwości formatowania niż tryb CC.

CC mode manual - Limitations-and-Known-Bugs

+0

dobrze, tak, ale po załadowaniu styl Można sformatować. –

+0

Tak, więc chcę załadować styl i zastosować funkcję bufora wcięcia. A następnie zrób to ze wszystkimi plikami. – Frank

+0

Reindent, tak. Reformat, nie. Newlines przed/po nawiasach klamrowych na przykład nie ulegają zmianie. –

3

Zrobiłem to wcześniej, używając makra zdefiniowanego na klawiaturze. Załadowałbym wszystkie pliki do emacs (coś w stylu find . -name "*.cpp" | xargs emacs), a następnie wpisz następujące klucze. Zanotowałem każdą kombinację klawiszy z tym, co robi.

C-x-(     'Begin recording macro 
M-<     'Go to start of file 
C-space    'Mark current location (now start of file) 
M->     'Go to end of file 
M-x indent-region  'Indent entire file according to coding style 
C-x C-s    'Save the current buffer 
C-x C-k    'Close the current buffer 
C-x-)     'End recording macro 

Teraz można uruchomić to na bufor wpisując C-x e. Jeśli załadowałeś kilka plików, możesz uruchomić coś w rodzaju C-u 100 C-x e, aby uruchomić to na 100 plikach. Jeśli jest to więcej niż liczba plików, to jest ok, otrzymasz po prostu "dzwonek" lub inny błąd, który możesz zignorować po zakończeniu przetwarzania.

0

Jeśli chcesz oznaczyć plików źródłowych w dired buforze, a następnie uruchomić funkcję formatowania każdy może zrobić coś takiego:

(defun clean-file(filename) 
    (your-function-goes-here)) 

(defun clean-each-dired-marked-file() 
    (interactive) 
    (for-each-dired-marked-file 'clean-file)) 

(defun for-each-dired-marked-file(fn) 
"Do stuff for each marked file, only works in dired window" 
(interactive) 
(if (eq major-mode 'dired-mode) 
    (let ((filenames (dired-get-marked-files))) 
     (mapcar fn filenames)) 
    (error (format "Not a Dired buffer \(%s\)" major-mode)))) 
Powiązane problemy