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

时间:2011-11-14 22:10:08

标签: emacs elisp

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

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

3 个答案:

答案 0 :(得分:4)

如果你正在使用基于cc模式的模式(例如c-mode,c ++-mode,java-mode等),你可以点击 Cc Cs 然后它会告诉你你是什​​么句法类别的行。如果你想改变它,点击 C-c C-o ,你将被引导完成整个过程。有关详细信息,请查看有关自定义的cc模式文档:https://www.gnu.org/s/emacs/manual/html_node/ccmode/Customizing-Indentation.html

答案 1 :(得分:4)

一般答案很难。有些模式会比其他模式更明显,但在一般情况下(因为他们可以自由地实现缩进)我认为你不会想要阅读一些elisp。

TAB 的绑定开始可行,但可能会稍微耗时,具体取决于涉及多少个间接层。

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

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来阻止任何进一步的分析。

答案 2 :(得分:1)

如果您碰巧喜欢让自己的双手非常脏,那么elisp调试器始终会告诉您Emacs的最新动态。

如果您点击C-h k TAB,您将找到Emacs正在运行的功能(例如indent-for-tab-command),那么您可以执行M-x debug-on-entry RET indent-for-tab-command RET。现在无论何时点击TAB,您都会弹出一个调试器并逐步观察执行情况。

根据您的调试品味,它可能是令人发狂或具有启发性的体验。无论哪种方式,当你完成时都不要忘记M-x cancel-debug-on-entry