2012-02-02 15 views
6

Tôi muốn các emacs coi "#ifdef" chính xác như "{" và "#endif" như "}" liên quan đến thụt đầu dòng. Cũng giống như vậy:Làm cách nào để làm cho các emacs đối xử với #ifdef và #endif như '{' và '}'?

#ifdef __linux__ 
    #include <sys/socket.h> 
#endif 

int func(void) 
{ 
    int foo = 0; 

    #ifdef DO_STUFF 
     foo = do_stuff(); 
    #endif 

    return foo; 
} 

thay vì:

#ifdef __linux__ 
#include <sys/socket.h> 
#endif 

int func(void) 
{ 
    int foo = 0; 

#ifdef DO_STUFF 
    foo = do_stuff(); 
#endif 

    return foo; 
} 

Rối tung xung quanh với "cpp vĩ mô" không làm các trick. Tôi sẽ làm như thế nào? Cảm ơn!

Trả lời

4

Bạn có thể sử dụng tập tin el này cho emacs: http://www.emacswiki.org/emacs/ppindent.el

Bạn có thể tìm thông tin nhiều về emacs thụt đầu dòng ở đây: http://www.emacswiki.org/emacs/IndentingC

+0

ppindent "indents" bằng cách đặt dấu cách giữa '#' và 'ifdef'. Tôi nghĩ điều đó khó đọc hơn. Tôi muốn giữ '#ifdef' với nhau và thụt lề bằng cách đặt khoảng trống trước '#'. – colding

+0

Ok, tôi đã thực hiện một số sửa đổi cho các tập tin lisp: [ở đây] (http://pastebin.com/uUqYpCua), tôi hy vọng thời gian này là những gì bạn cần. – ClemPi

+0

Điều đó gần hơn với những gì tôi cần. Bây giờ, mà không tự mình thử nó, làm thế nào nó sẽ thụt vào khi #ifdef ở giữa mã bình thường? Liệu nó có thụt vào không phân biệt mã xung quanh hay nó sẽ đi theo dòng chảy để nói? – colding

3

Preprocessor bình luận của được đã dự định bắt đầu vào cột đầu tiên, vì vậy emacs là chính xác ở đó, tuy nhiên những ngày này trình biên dịch thường cho phép chúng được thụt vào. (Xem Indenting #defines)

Điều đó nói rằng, hãy xem Indent preprocessor directives as C code in emacs để thảo luận về điều này. Infact, tôi có thể thử và đóng câu hỏi này như là một bản sao của điều đó.

Tôi đồng ý với một số nhận xét về vấn đề đó, do nhầm lẫn với bộ xử lý trước bị chặn hoặc lexically scoped, vì vậy thực sự có hại để thụt lề theo cách tương tự như bạn làm với mã C thông thường.

+2

Tôi nghĩ rằng "được cho là bắt đầu" là không chính xác. Theo tiêu chuẩn hiện tại, họ không. Có lẽ bạn muốn thay thế nó bằng "được cho là bắt đầu"? Điều đó không có nghĩa là tôi không đồng ý với bạn về điểm mà họ * nên * bắt đầu từ đầu từ một quan điểm nhất quán/bảo trì. –

+0

@NiklasBaumstark: Điểm. :) – Arafangion

+0

@ruakh: Cảm ơn. Chết tiệt, tôi cần cà phê. – Arafangion