emacs 缩进
emacs提供一些编码风格,可以使用M-x c-set-style
来选择你喜欢的编码风格。
Possible completions are:
awk bsd cc-mode ellemtel gnu java
k&r linux python stroustrup user whitesmith
当你开发c/c++时,上面的这些风格对于,if,while,for所用的大括号的缩进,有点不尽人意。具体来说是下面的样子:
if(...)
{//-----①
...
}
while(...)
{//-----①
...
}
for(...)
{//-----①
...
}
看着非常不爽,我想要下面的样子:
if(...)
{
...
}
while(...)
{
...
}
for(...)
{
...
}
如何解决呢?
步骤1:把光标移动到①处。
步骤2:按ctrl-c ctrl-o(函数:c-set-offset )后,minibuffer的显示如下:
注意:显示的【substatement-open】是函数c-set-offset的第一个参数。
步骤3:按回车后,minibuffer的显示如下:
可以输入数字,特殊字符。特殊字符包括【+
, -
, ++
, --
, *
, /
】。
这些特殊字符的含义:指出是变量 c-basic-offset
的多少倍。
-
零:代表和上一行对齐,不继续缩进。所以【{】就和上一行对齐了,达到了我的目的。
-
n:代表在对齐上一行的基础上,在缩进n个空格。
-
+:
c-basic-offset
times 1 -
-:
c-basic-offset
times −1 -
++:
c-basic-offset
times 2 -
--:
c-basic-offset
times −2 -
*:
c-basic-offset
times 0.5 -
/:
c-basic-offset
times −0.5
步骤4:选中if,for,while区域按TAB。
完成上面4个步骤后,if,while,for所用的大括号的缩进,就和if,while,for对齐。
想让上面的设置永久生效的化,就写如.emacs里。
(add-hook 'c-mode-common-hook
(lambda ()
(c-set-offset 'substatement-open 0)))
另外如果开启了自动换行和饥饿删除功能,配合缩进设置就更好用了。
(add-hook 'c-mode-common-hook
(lambda ()
(c-set-offset 'substatement-open 0)
(c-toggle-auto-hungry-state)));;启动自动换行和饥饿删除功能