终端中的Emacs不能正确加载配置。但是在emacs中打开文件可以正确地加载配置。
我尝试了几个用于cpp的emacs配置:
(eval-after-load "cc-vars" '(lambda() (c-set-style "linux")))另一个
(add-hook 'c-mode-hook '(lambda() (c-set-style "linux")))另一个
(eval-after-load "cc-vars" '(setq c-default-style "linux")))如果我输入emacs filename,它们就无法加载。似乎emacs总是加载默认的gnu样式。
在我输入M-x c-mode之后,可以正确地加载它们。或者我在终端中打开emacs,然后C-x C-f加载文件,这些配置也会被加载。
有什么原因吗?
我也试过
(c-set-style "linux")直接配置。
他们和emacs filename一起工作。但是,当我打开非cpp文件时,会出现一个错误,即不能在该文件上应用c-set-style。
发布于 2022-05-02 08:06:33
来自CC模式手册
当您创建一个新缓冲区时,它的样式将从c-默认样式设置.
来自Emacs手册
还可以将变量c-默认样式设置为指定各种主要模式的默认样式。
从c-set-style函数的文档中:
将当前缓冲区设置为使用STYLENAME样式。
这意味着,对c-set-style的任何调用都必须确保当前缓冲区是您希望设置样式的缓冲区;然后,在init文件中的toplevel上放置这样的调用肯定是个坏主意。
最简单的解决方法就是将(setq c-default-style "linux")放在最顶层,如果您真的需要的话,将其封装到eval-after-load中。变量就是用于这个目的的,如果需要的话,应该保留钩子,以便更精确地控制当前文件的样式(正如c-default-style文档所建议的)。
对我来说,(eval-after-load "cc-vars" '(setq c-default-style "linux"))工作得很好:如果我打开CC-mode覆盖的任何文件,就会应用Linux风格。请注意,c-mode和CC modes是不同的东西,存在着c-mode-hook、c++-mode-hook、c-mode-common-hook,它们都是不同的,并将在不同的时间运行。
https://stackoverflow.com/questions/72083204
复制相似问题