2014-03-02 85 views
2

我正在查看此question,並意識到我有一個類似的問題沒有在那裏得到徹底解答。獲取emacs的訪問標籤縮進以添加縮進級別

我希望訪問說明符添加一個縮進級別。在thisthis頁面上,我發現我需要縮進的語法符號是access-label。因此,我需要使用(c-set-offset 'access-label '0)

但是,這隻會縮進包含訪問標籤的行,而不會包含訪問標籤。我得到的是這樣,

class foo { 
    public: 
    void someFunc(); // Doesn't take the indentation of the access label into account 
    ... 
    }; 

我要的是,

class foo { 
    public: 
    void someFunc(); 
    ... 
    }; 

我會怎麼做呢?有一些其他變量我想修改嗎?

回答

1

您需要使用inclass來設置類內功能&成員的縮進。 但是,這會導致功能& struct中的成員將縮進2個選項卡,而不是一個,所以我們需要一個特殊的功能來設置正確的縮進寬度。我使用following config來實現這一點(我有段從某處在互聯網上,也許從emacswiki)...

+0

這是相當不幸的是,沒有一種更直接的方法來實現這一點。我想想縮進訪問標籤會更頻繁地出現。 – namzug

+0

對於類的配置很簡單,但對於我們需要製作這些技巧的結構:-( –

1

如果您使用新的生產線的支撐,上方的解決辦法並不完全正確;如果在第一次轉身之後,您必須檢查 。這是我更常用的解決方法:


(defun agb/c++-mode-hook() 
    (c-set-offset 'access-label '-) 
    (c-set-offset 'topmost-intro '0) 
    (c-set-offset 'inclass '(lambda (arg) 
          (let ((inclass (assoc 'inclass c-syntactic-context))) 
           (save-excursion 
           (goto-char (c-langelem-pos inclass)) 
           (if (looking-at "{") 
            (goto-char (c-langelem-pos (assoc 'class-open (c-guess-basic-syntax))))) 
           (if (or (looking-at "struct") 
             (looking-at "typedef struct")) 
            '+ 
            '++))))))