• emacs 定制进缩风格


    纵览

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

  • 相关阅读:
    gradle阿里云镜像配置
    tomcat相关
    Oracle通过SQL语句查看table所引用的对象(View/Function/Procedure/Trigger)
    C# 调用NPOI 修改Excel 完成实时更新公式结果
    SpringBoot2.1.6 整合CXF 实现Webservice
    SpringBoot中FreeMarker创建
    git回滚到指定commit
    idea push reject:push mater to origin/master was rejected by remote
    python读取文件
    python获取当前文件路径以及父文件路径
  • 原文地址:https://www.cnblogs.com/wendellyi/p/3920641.html
Copyright © 2020-2023  润新知