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

最新文章

  1. Java并发编程核心方法与框架-exchanger的使用
  2. C#中Delegate和Event以及它们的区别(转载)
  3. hdu 1735 字数统计
  4. oracle11g导入到10g
  5. 线程局部变量ThreadLocal的原理及使用范围_1
  6. GDAL Configure in Visual Studio 2010 for Win7/ GDAL+VisualStudio2010 Win7 配置
  7. SQL对字符串进行排序
  8. 第一章 用three.js创建你的第一个3D场景
  9. 基于Flume的美团日志收集系统(一)架构和设计【转】
  10. France '98
  11. img 的 3px
  12. HDU - 2160 递推
  13. [Swift]LeetCode121. 买卖股票的最佳时机 I | Best Time to Buy and Sell Stock
  14. Linker Scripts3--SECTIONS Command
  15. 移动rem自适应
  16. C#基础知识回顾--串行化与反串行化
  17. 【SPL标准库专题(4)】 Datastructures:SplDoublyLinkedList
  18. Visual Studio 2012自动添加注释(如版权信息等)
  19. 如何解决Mac只能登QQ不能联网
  20. 下载8000首儿歌的python代码

热门文章

  1. 23种设计模式之Builder设计模式
  2. Java实现命令行中的进度条功能
  3. gdisk分区及swap分区
  4. ORACLE关于日志文件基本操作
  5. Linux日志中出现大量dhclient mesage浅析
  6. MySQL数据库:基本操作及增删改查语句
  7. RPM命令总结
  8. 关于学习和开发Android的一点体会
  9. go语言设计模式之Concurrency workers pool
  10. LG3825/BZOJ4945/LOJ2305 「NOI2017」游戏 dfs+2-SAT