如何将php模式的设置从.emacs移动到.dir-local .el



这是我的。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-local .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 '+)       
      ))

怎么了?

目录局部变量就是——变量;要计算的不是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将要求您确认代码在遇到它时是安全的,并且如果您愿意,将其保存到初始化文件的custom-set-variables部分中的safe-local-variable-values列表中。

最新更新