在Emacs中,我正在编辑一些源代码,然后点击< tab>。 Emacs将行缩进到n个空格。我想改变那种线的缩进量。我如何弄清楚应用什么规则emacs来缩进该行n个空格?
我想更改n,但我需要弄清楚Emacs中使用的许多与缩进相关的变量中的哪一个。
答案 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
。