2011-09-07 41 views
7

以下是我的.emacs文件中的內容。如何將.php模式設置從.emacs移動到.dir-locals.el?

(add-hook 'php-mode-hook 
     (lambda() 
     (c-set-style "bsd") 
     (setq indent-tabs-mode t) 
     (setq c-basic-offset 4) 
     (setq tab-width 4) 
     (c-set-offset 'arglist-close 'c-lineup-arglist-operators) 
     (c-set-offset 'arglist-intro '+) 
     (c-set-offset 'arglist-cont-nonempty 'c-lineup-math) 
     (c-set-offset 'case-label '+)  
     )) 

我想將這些格式設置移動到項目特定的目錄。儘管setq語句(例如(setq indent-tabs-mode t))可以輕鬆完成,但我無法完成以下函數調用:(c-set-offset 'arglist-intro '+)

以下是我已經把我的.DIR-locals.el:

;;; Directory Local Variables 
;;; See Info node `(emacs) Directory Variables' for more information. 

    ((php-mode 
     (c-set-style "bsd") 
     (indent-tabs-mode . t) 
     (c-basic-offset . 4) 
     (tab-width . 4) 
     (c-set-offset 'arglist-close 'c-lineup-arglist-operators) 
     (c-set-offset 'arglist-intro 'c-basic-offset) 
     (c-set-offset 'arglist-cont-nonempty 'c-lineup-math) 
     (c-set-offset 'case-label '+)  
    )) 

這裏有什麼問題?

回答

10

目錄局部變量就是 - 變量;不是要評估的elisp表單。幸運的是,通過eval僞變量提供:

((php-mode 
    (indent-tabs-mode . t) 
    (c-basic-offset . 4) 
    (tab-width . 4) 
    (eval . (progn 
      (c-set-style "bsd") 
      (c-set-offset 'arglist-close 'c-lineup-arglist-operators) 
      (c-set-offset 'arglist-intro 'c-basic-offset) 
      (c-set-offset 'arglist-cont-nonempty 'c-lineup-math) 
      (c-set-offset 'case-label '+))))) 

Emacs會要求您確認該代碼是安全的,當它遇到它,將它保存到safe-local-variable-values列表中的custom-set-variables部分的init文件,如果你願意。