纵览

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. C# MySql Select

    MySqlCommand objCmd = new MySqlCommand("select * from `main_db`.`t_realdailyinfo` ", objCo ...

  2. Spark 机器学习 ---CountVectorizer

    文本特征提取->> CountVectorizer:基于词频数的文档向量 package Spark_MLlib import org.apache.spark.ml.feature.Co ...

  3. 72. js EXTJS grid renderer用法

    转自:https://blog.csdn.net/shancunxiaoyazhi/article/details/22156083 renderer : Function (可选的)该函数用于加工单 ...

  4. Linux特殊符号及基础正则表达式

    第1章 特殊符号 1.1 引号系列 1.1.1 单引号 所见即所得  单引号里面的内容会原封不动的输出 [root@oldboyedu50-lnb ~]# echo 'oldboy $LANG $PS ...

  5. thinkphp结合云之讯做短信验证码

    thinkphp结合云之讯做短信验证码先去云之讯注册账号 网址http://www.ucpaas.com/ 注册云之讯平台账号,即可免费获得10元测试费用测试够用啦 解压附件到 ThinkPHP\Li ...

  6. Java Socket编程 深入讲解?你之前真的学懂了吗

    很多人学习Socket往往会碰到这样哪样的问题,可以看看下面,加深理解.能看懂多少看懂多少. Socket是Java网络编程的基础,了解还是有好处的,这篇文章主要讲解Socket的基础编程.Socke ...

  7. JavaScript--确认(confirm 消息对话框)

    confirm 消息对话框通常用于允许用户做选择的动作,如:“你对吗?”等.弹出对话框(包括一个确定按钮和一个取消按钮). 语法: confirm(str); 参数说明: str:在消息对话框中要显示 ...

  8. PKUSC2017 游记 密码:blog密码

    退役之前,写点破事乐呵乐呵 省选滚大粗   报了PKU和THU的SC  果然THU直接审核不通过... 于是就来到了PKU   滚粗狗就又续命几天. Day1 上午考数学 喜闻乐见啥都不会 出来一对题 ...

  9. Android -----listView的重要属性

    android:transcriptMode="alwaysScroll" android:cacheColorHint="#00000000" android ...

  10. mongo3.4 配置文件 注意事项

    给mongo配置文件坑了好久,今天终于解决了.写个博客,庆祝一下. mongo3.4 版本,我是用YAML格式的配置文件. 一开始,配置之后,启动服务的时候,老是提示:“unrecognized op ...