2009-04-04 10 views

Trả lời

9

Có một số mảnh này:

  • bạn cần phải đưa ra các chức năng Emacs để làm tất cả các định dạng mà bạn muốn. indent-region là sự khởi đầu, nhưng bạn cũng có thể muốn hủy xác minh hoặc một số thứ khác.
  • bạn cần phải gọi chúng trên mỗi tệp và do chức năng thụt lề hoạt động trên các phạm vi, bạn cần một hàm đặt đánh dấu để bao gồm toàn bộ tệp: mark-whole-buffer.
  • bạn cần gọi EMACS trên mỗi tệp: điều này có nghĩa là gọi các emacs bằng tệp --batch.

Có một vài bài đăng trên blog tốt đẹp khi thực hiện điều này herehere.

+0

Điều đó có vẻ tốt, cảm ơn! – Frank

+0

Thật không may, các liên kết đến các bài đăng trên blog hiện đã chết. – Paul

+0

Các bài đăng trên blog hiện đang hoạt động. –

2

Tôi tin rằng tập lệnh này không định dạng lại. Thay vào đó là một ví dụ về làm thế nào để xây dựng một tùy chỉnh "phong cách" như mô tả trong: CC-chế độ bằng tay CC mode manual - Styles

cũng nói:

Nếu bạn muốn định dạng lại mã cũ, bạn có lẽ tốt hơn bằng cách sử dụng một số công cụ khác thay thế, ví dụ GNU thụt lề, có khả năng định dạng mạnh hơn CC Mode.

CC mode manual - Limitations-and-Known-Bugs

+0

tốt, yeah, nhưng khi nạp phong cách bạn có thể định dạng lại. –

+0

Vâng, vì vậy tôi muốn tải phong cách và áp dụng chức năng indent-buffer. Và sau đó làm điều đó với tất cả các tập tin. – Frank

+0

Reindent, yes. Định dạng lại, không. Các dòng mới trước/sau khi niềng răng ví dụ không được thay đổi. –

3

Tôi đã thực hiện việc này trước khi sử dụng macro được xác định bằng bàn phím. Tôi sẽ tải tất cả các tập tin vào emacs (một cái gì đó như find . -name "*.cpp" | xargs emacs) và sau đó gõ các phím sau đây. Tôi đã chú thích mỗi tổ hợp phím với những gì nó làm.

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 

Bây giờ bạn có thể chạy bộ đệm này bằng cách nhập C-x e. Nếu bạn đã tải một số tập tin, bạn có thể chạy một cái gì đó như C-u 100 C-x e để chạy này trên 100 tập tin. Nếu điều này nhiều hơn số lượng tệp, điều đó là ok, bạn sẽ chỉ nhận được một số "chuông reo" hoặc lỗi khác mà bạn có thể bỏ qua khi tất cả quá trình xử lý hoàn tất.

0

Nếu bạn muốn đánh dấu các file nguồn trong một bộ đệm dired và sau đó chạy một chức năng để định dạng mỗi bạn có thể làm một cái gì đó như thế này:

(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)))) 
Các vấn đề liên quan