Я новичок в emacs. Как определить и использовать новую переменную в .dir-locals.el?Определите новую переменную в .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")))))
Согласно примерам из How do I set buffer local variable from 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))))
Большое вам спасибо! –
В общем, будьте осторожны с тем, что вы 'setq'ing через' eval' таким образом. Если переменная уже (или автоматически) буферично-локальная, то 'setq' будет устанавливать глобальное значение (как обычно), поэтому примеры (1) и (2) не обязательно эквивалентны. Последние версии Emacs предоставляют 'setq-local' (что более удобно, чем более старый метод для установки локального значения buffer, когда переменная не является уже/автоматически так), и я был бы склонен использовать его в таких ситуациях независимо от того, для лучшей ясности. – phils