纵览

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 了。

emacs 定制进缩风格的更多相关文章

  1. 手把手教你学会 Emacs 定制

    Table of Contents 1 前言 2 配置Emacs 2.1 设置界面 2.2 全屏以及最大化 2.3 设置周边 2.4 显示时间设置 2.5 设置日历 2.6 设置符合个人的操作习惯 2 ...

  2. android开发游记:SpringView 下拉刷新的高效解决方式,定制你自己风格的拖拽页面

    关于下拉刷新/上拉载入很多其它的解决方式网上已经有非常多了,浏览了眼下主流的下拉控件比方PullToRefresh库等.第一:大多数实现库都难以进行动画和样式的自己定义. 第二:不能非常好的兼容多种滚 ...

  3. Emacs 16进制模式

    http://blog.163.com/lan_ne/blog/static/1926701702012112272840545/ ALT+X hexl-mode   进入16进制模式 在这一模式,直 ...

  4. Emacs 设置C++代码风格

    ;; C++代码风格设置 (defconst cobbcpp '("linux" ; this is inheritance from the linux style (c-bas ...

  5. emacs之配置代码风格

    emacsConfig/code-style-setting.el (add-hook 'c-mode-common-hook ( lambda() ( c-set-style "java& ...

  6. Android开发学习之 定制界面风格

    统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...

  7. Android开发:怎样定制界面风格

    统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...

  8. Android—— 定制界面风格

    统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...

  9. [转载]生活在 Emacs 中

    Brian Bilbrey2002 年 8 月 20 日发布 教程简介 本教程讲什么? Emacs 是一个流行的无模式文本编辑器,有许多强大的功能.本教程将教您使用 Emacs 的基础知识.为了让您很 ...

随机推荐

  1. linux 下载 图片

    linux  curl  下载图片 l=[] with open('ee.html','r',encoding='utf-8') as fr: for i in fr: ii=i.split('&qu ...

  2. return在Java中的两个作用

    Java中return的两个作用:   (1)返回方法指定类型的值(这个值总是确定的),也可以是对象   (2)方法的结束

  3. POJ2492 A Bug's Life 判断二分图

    给一个无向图,判断是否为二分图 是否有奇环.用染色法解决,也可以用并查集解决,时间复杂度是相同的,但是并查集用的内存少. 这里给出Bfs染色的代码 #include<iostream> # ...

  4. openstack instance resize to rebuild

  5. 使用adb进行关机(转载)

    转自:http://hi.baidu.com/fangqianshu/item/dc52b92d31b2dd1542634a3d 其实进入adb shell,然后执行reboot -p或者直接在命令行 ...

  6. PCB 规则引擎之脚本语言JavaScript应用评测

    世界上没有好做的软件,觉得好做,只是你的系统简单而已,而不是哪个行业简单,特别像我们PCB制造企业务逻辑的很复杂的,仅仅靠决策树中的每个节点布置决策逻辑是不能满足要求的,所以我们在制作PCB规则引擎必 ...

  7. Jquery 表单基础元素操作总结

    最近做前端比较多总结一些常用功能: radio 单选选中并且出发change事件: $(selector).find('input:radio[name=valuationMode]').filter ...

  8. 更新换代之requests库

    好久不更新博客了... 之前的博文都是通过urllib2进行http访问,接下来我要说一个利器啊!requests模块,无法用语言对他进行赞扬了,需要的,有兴趣的,可以去了解下,移步官方中文文档: R ...

  9. Eclipse中搭建Apache Tomcat7源码调试环境

    第一步:获取Apache Tomcat7源码,读者可以从Apache 官方网站获取,官方下载地址: http://tomcat.apache.org/download-70.cgi 注意选择Sourc ...

  10. Android 微信分享不出去?四步搞定!

    现在做的项目中集成了友盟分享,产品要求集成微信.朋友圈.QQ.QQ空间.短信这几个分享平台.按照友盟的文档集成一切都很顺利,集成成功以后测试QQ.QQ空间.短信都没有问题,唯独微信和朋友圈一直分享不出 ...