首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在..dir locals.el中定义新变量

在..dir locals.el中定义新变量
EN

Stack Overflow用户
提问于 2015-10-11 08:30:04
回答 1查看 4.2K关注 0票数 8

我对电子邮件很陌生。如何在..dir locals.el中定义和使用新变量?

这是我的..dir locals.el,没有用。

代码语言:javascript
复制
(setq clang_args '("-isystem/usr/include/glib-2.0"
                   "-isystem/usr/lib/glib-2.0/include"))
((c-mode . ((company-clang-arguments . clang_args)
            (flycheck-clang-args . clang_args))))

这行得通

代码语言:javascript
复制
((c-mode . ((company-clang-arguments . ("-isystem/usr/include/glib-2.0"
                                        "-isystem/usr/lib/glib-2.0/include"))
            (flycheck-clang-args . ("-isystem/usr/include/glib-2.0"
                                    "-isystem/usr/lib/glib-2.0/include")))))

根据如何从Eval: in ..dir local.el中设置缓冲区局部变量?的例子,我尝试了其他方法,但失败了。

代码语言:javascript
复制
((c-mode . ((eval . (setq company-clang-arguments ("-isystem/usr/include/glib-2.0"
                                                   "-isystem/usr/lib/glib-2.0/include"))
            (eval . (setq flycheck-clang-args ("-isystem/usr/include/glib-2.0"
                                               "-isystem/usr/lib/glib-2.0/include"))))))

代码语言:javascript
复制
((c-mode . ((eval . (setq clang_args ("-isystem/usr/include/glib-2.0"
                                      "-isystem/usr/lib/glib-2.0/include"))
            (company-clang-arguments . clang_args)
            (flycheck-clang-args . clang_args))))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 06:43:52

您可以使用特殊关键字eval执行任意lisp代码,例如定义临时变量。但是,您就不能在后续的运算符式变量声明中使用该变量.也就是说,以下内容不起作用:

代码语言:javascript
复制
((c-mode . ((eval . (setq clang-args ("-isystem/usr/include/glib-2.0"
                                      "-isystem/usr/lib/glib-2.0/include"))
            (company-clang-arguments . clang-args)
            (flycheck-clang-args . clang-args))))

因为当设置clang-argssetq表单中成功时,下面的两个变量定义分别将符号clang-args分配给company-clang-argumentsflycheck-clang-args,而不是前面定义的变量clang-args的值。不过,有两种选择是可行的:

1)使用相同的字符串文本两次:

代码语言:javascript
复制
((c-mode . ((company-clang-arguments . ("-isystem/usr/include/glib-2.0"
                                        "-isystem/usr/lib/glib-2.0/include"))
            (flycheck-clang-args . ("-isystem/usr/include/glib-2.0"
                                    "-isystem/usr/lib/glib-2.0/include")))))

2)在eval表单中执行实际的变量赋值:

代码语言:javascript
复制
((c-mode . ((eval . (let ((clang-args '("-isystem/usr/include/glib-2.0"
                                        "-isystem/usr/lib/glib-2.0/include")))
                      (setq company-clang-arguments clang-args
                            flycheck-clang-args clang-args))))))

在我看来,第一个更易读,而第二个可能更易于维护,因为对值的更改只需在一个位置进行。

增编:注意到phils的评论:他的建议是在第二个选项中用setq-local代替set。这将导致以下情况:

代码语言:javascript
复制
((c-mode . ((eval . (let ((clang-args '("-isystem/usr/include/glib-2.0"
                                        "-isystem/usr/lib/glib-2.0/include")))
                      (setq-local company-clang-arguments clang-args
                                  flycheck-clang-args clang-args))))))
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33063008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档