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)));;启动自动换行和饥饿删除功能

最后,当你发现任何地方的缩进不是你想要的,都可以通过调用函数c-set-offset,并指定参数和缩进的值,来实现。当不知道参数是啥的时候,就把光标放到那一行,按ctrl-c ctrl-o后,在minibuffer上显示的名字就是你想要的参数的名字。

参考gnu

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

posted @ 2019-11-27 14:41  小石王  阅读(805)  评论(0编辑  收藏  举报