我如何确定为什么 emacs 缩进了一定数量?

Dan*_*ach 4 emacs elisp

在 Emacs 中,我正在编辑一些源代码,然后点击 <tab>。Emacs 将行缩进到 n 个空格。我想更改那种行的缩进量。我如何弄清楚 emacs 应用什么规则将该行缩进 n 个空格?

我想改变n,但我需要弄清楚Emacs刚刚使用了许多与缩进相关的变量中的哪一个。

phi*_*ils 5

通用的答案是困难的。有些模式会比其他模式更明显,但在一般情况下(因为他们可以随意实现缩进,但他们希望)我认为你不会摆脱需要阅读一些elisp。

从绑定开始TAB可以工作,但可能会稍微耗时,具体取决于涉及多少间接层。

如果您知道所讨论的主要模式实现了自己的缩进,那么您可以尝试帮助追踪被调用函数的一种(不严格但快速)方法是使用 ELP,即内置的 elisp 分析器。elp-instrument-package将检测名称与您指定的前缀字符串参数匹配的所有函数。因此,您可能会在 PHP 文件中执行以下操作(注意 php-mode 告诉您它是从 c-mode 派生的)

M-x elp-instrument-package RET php- RET
M-x elp-instrument-package RET c- RET
M-x elp-instrument-package RET indent RET

现在输入TAB您的源代码,然后运行M-x elp-results以查看调用了哪些已检测的函数。

在这一点上,您是靠自己的——寻找可能的嫌疑人,并查看代码在做什么——但这可能是过滤搜索的一种方便的方式。

完成后,使用M-x elp-restore-all防止任何进一步的分析。