如何在cc模式下自由格式化注释

时间:2013-08-08 20:03:32

标签: emacs indentation auto-indent cc-mode

我对cc-mode很新,我想配置它以允许我在多行注释中自由格式化和使用标签。这对我很重要,因为我想在我的源文件中使用cog.py,并且需要能够正确地在注释中格式化python源。我可以完全没有自动缩进的评论,但是我想继续自动缩进其余的源代码。

示例:

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

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

我尝试在没有我的.init的情况下启动emacs,以确保这是默认行为,并且到目前为止我的配置没有修改。我已经完成谷歌搜索,并在搜索解决方案时阅读了我偶然发现的cc模式变量/函数的文档(cc-mode online docs)(即c-indent-comments-syntactically-p,c-indent-command ,c-tab-always-indent,...)但这些似乎都没有解决我的问题。

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用M-i强制在所需的行上缩进标签,这样您就可以用它来缩进评论。

您也可以将注释更改为使用//。只需选择您的python代码段,然后执行M-x comment-region

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

然后autoindent不会弄乱你的缩进。