2

我一直在尝试解决sh-modeEmacs 中的缩进问题(我在 a 之后得到了双缩进then),发现我可以手动设置缩进,然后运行C-c >以自动配置缩进。

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

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

我在这个网站上发现了许多关于列出变量及其值的问题,但我不知道如何列出仅在当前会话中更改的那些。我什至用这篇文章C-c >在运行命令和比较输出之前和之后转储变量;没有什么明显不同。

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

  1. 如果会话变量是“本地规则”的意思,那么我如何找出设置了哪些变量?
  2. 如果“本地规则”意味着别的东西,那是什么,我怎样才能以某种方式将这些更改转移到我的~/.emacs文件中?
4

2 回答 2

1

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

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

更多细节:smie-config-save本身不会将设置保存到~/.emacs. 它仅将它们从瞬态缓冲区局部变量传输到自定义控制下smie-config--buffer-local的全局变量,并且可以通过类似. 可以说,这应该在. 我建议要求这种改进。smie-config~/.emacsM-x customize-save-customizedsmie-config-saveM-x report-emacs-bug

于 2016-11-01T13:28:23.797 回答
0

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

这个想法是在加载 shell 脚本后立即触发 sh-learn-buffer-indent。将以下内容添加到您的~/.emacs文件中:

(add-hook 'sh-set-shell-hook 'sh-learn-buffer-indent)

几个重要的注意事项:

  1. 它假定您的 shell 脚本在加载时已经正确格式化。
  2. 大文件可能会很慢。

(这显然在我提交的错误报告sh-script.el中提到并由 Noam Postavsky 引起了我的注意。)

于 2017-08-24T13:54:40.923 回答