我对电子邮件很陌生。如何在..dir locals.el中定义和使用新变量?
这是我的..dir locals.el,没有用。
(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))))这行得通
((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中设置缓冲区局部变量?的例子,我尝试了其他方法,但失败了。
((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"))))))和
((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))))发布于 2015-10-12 06:43:52
您可以使用特殊关键字eval执行任意lisp代码,例如定义临时变量。但是,您就不能在后续的运算符式变量声明中使用该变量.也就是说,以下内容不起作用:
((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-args在setq表单中成功时,下面的两个变量定义分别将符号clang-args分配给company-clang-arguments和flycheck-clang-args,而不是前面定义的变量clang-args的值。不过,有两种选择是可行的:
1)使用相同的字符串文本两次:
((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表单中执行实际的变量赋值:
((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。这将导致以下情况:
((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))))))https://stackoverflow.com/questions/33063008
复制相似问题