以下是我的.emacs文件中的内容。
(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 '+)
))
这里有什么问题?
答案 0 :(得分:11)
目录局部变量只是 - 变量;不是要评估的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
列表中。