首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >终端中的Emacs不能正确加载配置。但是在emacs中打开文件可以正确地加载配置。

终端中的Emacs不能正确加载配置。但是在emacs中打开文件可以正确地加载配置。
EN

Stack Overflow用户
提问于 2022-05-02 06:47:50
回答 1查看 34关注 0票数 0

终端中的Emacs不能正确加载配置。但是在emacs中打开文件可以正确地加载配置。

我尝试了几个用于cpp的emacs配置:

代码语言:javascript
复制
(eval-after-load "cc-vars" '(lambda() (c-set-style "linux")))

另一个

代码语言:javascript
复制
(add-hook 'c-mode-hook '(lambda() (c-set-style "linux")))

另一个

代码语言:javascript
复制
(eval-after-load "cc-vars" '(setq c-default-style "linux")))

如果我输入emacs filename,它们就无法加载。似乎emacs总是加载默认的gnu样式。

在我输入M-x c-mode之后,可以正确地加载它们。或者我在终端中打开emacs,然后C-x C-f加载文件,这些配置也会被加载。

有什么原因吗?

我也试过

代码语言:javascript
复制
(c-set-style "linux")

直接配置。

他们和emacs filename一起工作。但是,当我打开非cpp文件时,会出现一个错误,即不能在该文件上应用c-set-style

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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-modeCC modes是不同的东西,存在着c-mode-hookc++-mode-hookc-mode-common-hook,它们都是不同的,并将在不同的时间运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72083204

复制
相关文章

相似问题

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