![](/img/trans.png)
[英]emacs C/C++ indentation: different for pre and post comments // or: how can I make certain comments like //^ be indented extra?
[英]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.