0

我对 cc-mode 很陌生,我想对其进行配置以允许我在多行注释中自由格式化和使用选项卡。这对我很重要,因为我想在我的源文件中使用cog.py并且需要能够正确格式化注释中的 python 源。我可以接受根本不自动缩进的注释,但是我想继续自动缩进其余的源代码。

例子:

...
/*
[[[cog
import cog
for x in ['a','b','c']:
>cog.outl(x)
]]]
*/
...

在标有 > 的行中,我想按 TAB 缩进该行。如果我这样做,cc-mode 根本什么都不做。我可以在那里使用空格(这很不方便),但是这个块的每次(半)自动重新缩进都会导致空格消失,因此 python 代码被错误地缩进(如果我碰巧在某处按下制表符会发生这种情况在用空格缩进后在这一行上)。

我尝试在没有我的 .init 的情况下启动 emacs,以确保这是默认行为,并且到目前为止没有被我的配置修改。我在搜索解决方案(即 c-indent-comments- syntactically -p、c-indent-command , c-tab-always-indent,...) 但这些似乎都不能解决我的问题。

EDIT1: 感谢 abo-abo 的“多主要模式”设置的想法,我偶然发现了 mmm-mode,并为 cog 部分设置了自动切换到 python 模式,这解决了我的大部分问题。

剩下的唯一问题是重新缩进整个文件或包含 cog 部分的区域。我可以以某种方式告诉 cc-mode 在重新缩进文件时不要更改注释中的任何内容吗?mmm-mode + 这对我来说是一个完美的解决方案。

4

1 回答 1

0

您可以使用M-i强制在您想要的行上缩进制表符,以便您可以使用它来缩进您的评论。

您也可以更改您的评论以//替代使用。只需选择您的 python 代码片段,然后执行以下操作M-x comment-region

// def foo(x):
//      print 'hi'

然后自动缩进不会弄乱你的缩进。

于 2013-08-09T02:32:20.857 回答