繁体   English   中英

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

[英]How do I determine why emacs indented a certain amount?

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

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

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

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

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

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

Mx elp-instrument-package RET php- RET
Mx elp-instrument-package RET c- elp-instrument-package RET
Mx elp-instrument-package RET indent RET

现在在源代码中键入TAB ,并运行Mx elp-results以查看调用了哪些已检测的函数。

在这一点上,你是独立的 - 寻找可能的嫌疑人,看看代码在做什么 - 但它可以是一种过滤搜索的方便方法。

完成后,使用Mx elp-restore-all来阻止任何进一步的分析。

如果您碰巧喜欢让自己的手真的很脏,那么总会有elisp调试器告诉您Emacs的最新动态。

如果你点击Ch k TAB你会发现Emacs正在运行的功能(例如indent-for-tab-command ),那么你可以进行Mx debug-on-entry RET indent-for-tab-command RET 现在每当你点击TAB你都会弹出一个调试器,并且可以逐步观察执行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM