纵览

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. go语言笔记——数组长度不可变,但是元素值是可变的!!!

    数组声明的格式是: var identifier [len]type 例如: var arr1 [5]int 在内存中的结构是: 对索引项为 i 的数组元素赋值可以这么操作:arr[i] = valu ...

  2. java web中路径问题。

    转自:http://blog.csdn.net/liang5630/article/details/38474543 如有侵权,请及时联系本人及时删除 在java web种经常出现 404找不到网页的 ...

  3. bzoj1997 [Hnoi2010]Planar——2-SAT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1997 神奇的经典2-SAT问题! 对于两个相交的区间,只能一里一外连边,所以可以进行2-SA ...

  4. 44. Ext信息提示对话框

    转自:https://www.cnblogs.com/glsqh/p/5920500.html Ext.window.MessageBox是一个工具类,他继承自Ext.window.Windoe对象, ...

  5. mysql_mssql_access_2017年最新手机号段归属地数据库(17年4月更新)360569记录

    mysql,mssql,access 三种格式免费分享给大家,末尾有下载地址 2017年4月最新版手机号段归属地,也叫手机归属地数据库  共360569条记录,三种格式:MYSQL,MSSQL,acc ...

  6. [Swift通天遁地]五、高级扩展-(7)UIView(视图类型)的各种扩展方法

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. Elasticsearch搜索常用API(利用Kibana来操作)

    上面我们已经介绍了Elasticsearch的一些基本操作,这篇文章属于进阶篇,我们一起来学习. 前面我们创建了sdb和user文档,现在我们来看如何查询user中所有的文档呢? GET /sdb/u ...

  8. CDH5.7Hadoop集群搭建(离线版)

    用了一周多的时间终于把CDH版Hadoop部署在了测试环境(部分组件未安装成功),本文将就这个部署过程做个总结. 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发 ...

  9. oracle数据库忘记用户名和密码莫着急

    刚安装完Oracle 11g后,登录的时候没有记住用户名和密码,解决方法:新建一个用户 第一步:以系统身份登录 cmd--->sqlplus 提示输入用户名,然后输入sqlplus/as sys ...

  10. LinearLayout中间布局填充出现的问题

    线性布局如何中间填充,会挤掉他下面的布局,所以中间填充使用layout_weight属性.