什么"当地规则"已经在Emacs中设置了?

时间:2016-10-31 14:33:59

标签: emacs smie

我一直在尝试解决Emacs中的sh-mode缩进问题(我在then后得到一个双缩进)并发现我可以手动设置缩进然后运行{{1} }自动配置缩进。

但是,此配置仅适用于我当前的会话,我似乎无法找到因自动配置而被修改的任何变量。 (虽然它有效:缩进始终是我想要的。)当它运行时,它会说"本地规则设置"但是没有告诉我已经设置了哪些本地规则。

当然,当我重新启动Emacs时,本地配置会丢失,我必须再次运行auto-config命令。

我在本网站上发现了一些关于列出变量及其值的问题,但我无法找到如何列出仅针对当前会话进行了更改的问题。我甚至使用this post在运行C-c >命令之前和之后转储变量并比较输出;没有什么明显的不同。

所以我想我的问题是双重的:

  1. 如果会话变量是"本地规则"的含义。然后我如何找出设置了哪些?
  2. 如果"当地规则"意味着什么,然后是什么,我怎么能以某种方式将这些更改转移到我的C-c >文件?

2 个答案:

答案 0 :(得分:1)

我认为结果取决于您的Emacs版本,但是对于最新版本,这由SMIE处理,因此个人设置保存在smie-config变量中。

当前缓冲区中使用的本地设置保存在内部变量(smie-config--buffer-local)中。您可以将其移至smie-config并通过致电~/.emacs将其保存到smie-config-save

还有一个细节:smie-config-save本身并不将设置保存到~/.emacs。它只将它们从瞬态缓冲区局部变量smie-config--buffer-local传输到受 Customize 控制的全局smie-config变量,并且可以保存到{{1}通过~/.emacs之类的东西。这应该可以在M-x customize-save-customized中得到改善。我建议smie-config-save要求改进。

答案 1 :(得分:0)

这是一个不完整的解决方法而不是答案,但它是一个开始!

想法是在加载shell脚本后立即触发sh-learn-buffer-indent。将以下内容添加到Column文件中:

~/.emacs

一些重要的注意事项:

  1. 它假定您的shell脚本在加载时已经正确格式化。
  2. 大文件可能会很慢。
  3. (add-hook 'sh-set-shell-hook 'sh-learn-buffer-indent) 显然提到了这一点,并且Noam Postavsky通过我提交的bug report引起了我的注意。)