2011-01-12 86 views
4

Emacs默認不會縮進預處理器代碼。我知道它的歷史根源現在已經過時了。將預處理器指令縮進爲emacs中的C代碼

但是,使用大量#ifdef縮進代碼很難閱讀。

所以我想提出emacs的自動縮進給我這樣的事情:

void myfunc() { 
    int foo; 

    #ifdef BAR 
    printf(foo); 
    #endif 

    return foo; 
} 

取而代之的是我現在得到:

void myfunc() { 
    int foo; 

#ifdef BAR 
    printf(foo); 
#endif 

    return foo; 
} 

你emacs的黑客這個問題的任何線索:) ?

+3

假裝預處理宏塊具有範圍是一個嚴重的錯誤。它需要幾十個失蹤的腳才能自己發現。 – 2011-01-12 15:31:44

+0

+1 to @Hans。第二種形式實際上更加清晰的海事組織。由於您實際上正在修改文件的內容,因此在文件「範圍」級別縮進(即根本不縮進)似乎更爲明智。我不確定討論關於預處理器指令的範圍有多有效。 – JeremyP 2011-01-12 17:03:20

回答

12

您可以簡單地告訴Emacs向預處理器行添加偏移量。

  • 將光標(point)在處理器中預線
  • 然後按抄送鈷(控制-C控制-O)
  • 迷你緩衝區應該說Syntactic symbol to change:
  • 類型cpp-macro,按輸入
  • 輸入新的偏移量(編號 - 通常爲0

然後一個TAB在每個預處理器行上應該正確縮進。 (或M-xindent-region ...)。

要永久更改設置,您可以在.emacs文件中添加所需的行。
複製先前輸入的命令的一種簡單方法是c-ESC ESC ESC並使用箭頭鍵查找(c-set-offset ...) Elisp命令。

這應該是

(c-set-offset (quote cpp-macro) 0 nil)