纵览

emacs 文档中描述,进缩风格实现只需要两步:第一步,根据内容与上下文找到对应的进缩风格的类别;第二步,依据进缩风格决定的表达式锚点的进缩偏移。下面我们对 cc-mode 风格定制加以说明。

进缩风格的类别

比如在 C 代码中,使用 C-c . 然后再使用两次 tab ,就可以出现多个内置风格供选择,每种风格对进缩偏移做了或多或少的设定,不尽相同,才表现出了不同的进缩风格。

进缩偏移

进缩偏移,就是对变量进行设定产生的。有两个十分重要的变量

c-basic-offset
c-offsets-alist

是前者的详细,是一个普通的整数值;后者的详细说明在这里,这是一个关联列表,存储了语法符号与偏移量的键值对,使用

c-set-offset

对其中的元素进行修改,下面给出了如下修改这些语法符号相关联的偏移量的方式,

  (setq c-basic-offset 4)
(c-set-offset 'substatement-open 0)
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-cont-nonempty '+)
(c-set-offset 'statement-case-intro '+)
(c-set-offset 'case-label 0)
(c-set-offset 'statement-case-open 0)

关于其中的“+”,在此处有很详细的说明,无非就是对 c-basic-offset 变量的值进行加减乘除,也就一个“+”,就代表偏移1倍 c-basic-offset ,在此处就是 4 。另外,语法符号名称众多,我们没有必要统统掌握,如果需要进缩某条给定的语句,但是我们不知道其语法符号的名称,在相关行上使用 C-c C-s 就可以知道其语法符号的名称,再做相应修改即可。

风格举例

  (setq c-basic-offset 4)
(c-set-offset 'substatement-open 0)
(c-set-offset 'statement-case-intro '+)
(c-set-offset 'case-label 0)
(c-set-offset 'statement-case-open 0)

上面的风格可以达到如下的效果,

    switch (a)
{
case :
break;
default:
break;
}

完整的代码如下

(defun my-c-mode-hook ()
(setq c-basic-offset 4)
(c-set-offset 'substatement-open 0)
(c-set-offset 'statement-case-intro '+)
(c-set-offset 'case-label 0)
(c-set-offset 'statement-case-open 0))
(add-hook 'c-mode-common-hook 'my-c-mode-hook)

定义自己的风格名称

我们肯定有这样的需求,在不同的项目中使用不同的编码风格,还得 emacs 中的内置风格不能满足需求,可以自定义多种不同的风格,推荐使用这里的方式,简而言之就是采用修改内置风格的方式自定义,省时省力,

(defun my-c-mode-hook ()
(c-add-style "ownstyle" '(
"k&r"
(c-basic-offset . 4))))
(add-hook 'c-mode-common-hook 'my-c-mode-hook)

只是把 k&r 中的基本进缩量修改为 4 ,其他的样式与 k&r 风格一致。这样重启 emacs ,打开 C 文件,使用 C-c . TAB TAB 就可以看见 ownstyle 了。

最新文章

  1. 大话设计模式C++版——装饰模式
  2. PL/SQL创建数据表空间
  3. VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
  4. [BZOJ3872][Poi2014]Ant colony
  5. 生产环境下一定要开启mysqlbinlog
  6. 用Editplus开发HTML
  7. Horizontal Toolbar With Navigational Buttons Form Sample For Oracle Forms 10g/11g
  8. 扫盲如何在ECLIPSE中使用条件断点
  9. PHP的魔术方法(简介)
  10. vue--指令中值得随笔的地方
  11. bzoj 2002 HNOI 2010 弹飞绵羊
  12. Mockito常用方法及示例
  13. (03) spring Boot 的配置
  14. [转]PowerDesigner大小写转换
  15. ok6410下的uboot分析与实现
  16. docker 第一次学习(一)--安装以及相关命令
  17. Linux命令(十二) 分割文件 split 合并文件 join
  18. iOS NSURLSession VS NSURLConnection
  19. EXTJS4扩展实例:一个调用Ext.picker.Color的颜色选择菜单
  20. BeanUtils.populate的方法的作用

热门文章

  1. AbstractRoutingDataSource动态选择数据源
  2. 阿拉伯数字1与英语字母l造成的代码bug
  3. 类型判断----小白讲解typeof,instanceof,Object.prototype.toString.call()
  4. linux如何更改yum源
  5. Maven 学习(1)
  6. Android彻底组件化demo发布
  7. linux 安装 mongo
  8. windows ping 某个网段,不能运行指定的软件
  9. 脚本添加删除nginx配置中的内容
  10. HDU_1063_Exponentiation_大数