`

emacs的缩进和自动添加新行

阅读更多
emacs很强大,但是强大是以复杂的配置为前提的!没有配置好的时候,可能它比notepad还要难用。

前一段时间我就被缩进弄得晕头转向,tab经常是缩进5个空格,源码会乱,等等,我都几乎要放弃emacs了。

今天偶然看了看emacs自带的manual中的cc-mode一节,哇,发现新大陆了!不光讲得很细,还有个例子,拷过来就可以用了,那缩进,怎一个酷字了得!

offset参数详情

c-hanging-braces-alist 控制大括号后自动加新行,class-open after 表示在新建class的大括号后自动另起一行, 比如
class newClass {
...
}

这里可以根据自己的喜好修改,通过在想要设置自动新行的大括号前按RET(回车), 然后按C-c,C-s 找出大括号的语义(Syntactic context of brace), 然后在c-hanging-braces-alist中加入对它的设置。比如得到的语义为substatement-open, 就把c-hanging-braces-alist加入(substatement-open after)

如果想要在除了缩进的地方(每行开头)的其他地方使用TAB来插入多个空格, 而不是错定格式。
把(c-tab-always-indent        . t)
改为
(c-tab-always-indent        . nil)

后来又参考了王垠、ann77的主页,将tab和缩进基本搞定,下面是配置内容:

(setq indent-tabs-mode nil)
(setq default-tab-width 4)
(setq tab-width 4)
(setq tab-stop-list ())
(loop for x downfrom 40 to 1 do
      (setq tab-stop-list (cons (* x 4) tab-stop-list)))

(defconst my-c-style
  '((c-tab-always-indent        . t)
    (c-comment-only-line-offset . 0)
    (c-hanging-braces-alist     . ((substatement-open after)
                                   (brace-list-open)))
    (c-hanging-colons-alist     . ((member-init-intro before)
                                   (inher-intro)
                                   (case-label after)
                                   (label after)
                                   (access-label after)))
    (c-cleanup-list             . (scope-operator
                                   empty-defun-braces
                                   defun-close-semi))
    (c-offsets-alist            . ((arglist-close . c-lineup-arglist)
                                   (substatement-open . 0)
                                   (cpp-macro . 0)
                                   (case-label        . 4)
                                   (block-open        . 0)
                                   (knr-argdecl-intro . -)))
    (c-echo-syntactic-information-p . t)
    )
  "My C Programming Style")

;; offset customizations not in my-c-style
(setq c-offsets-alist '((member-init-intro . ++)))

;; Customizations for all modes in CC Mode.
(defun my-c-mode-common-hook ()
  ;; add my personal style and set it for the current buffer
  (c-add-style "PERSONAL" my-c-style t)
  ;; other customizations
  (setq tab-width 4
        ;; this will make sure spaces are used instead of tabs
        indent-tabs-mode nil)
  ;; we like auto-newline and hungry-delete
  (c-toggle-auto-hungry-state 1)
  ;; key bindings for all supported languages.  We can put these in
  ;; c-mode-base-map because c-mode-map, c++-mode-map, objc-mode-map,
  ;; java-mode-map, idl-mode-map, and pike-mode-map inherit from it.
  (define-key c-mode-base-map "\C-m" 'c-context-line-break)
  )

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)





Hanging Semicolons and Commas

— User Option: c-hanging-semi&comma-criteria

    This style variable takes a list of functions; these get called when you type a semicolon or comma. The functions are called in order without arguments. When these functions are entered, point is just after the newly inserted `;' or `,' and they must preserve point (e.g., by using save-excursion). During the call, the variable c-syntactic-context is bound to the syntactic context of the current line1 see Custom Braces. These functions don't insert newlines themselves, rather they direct CC Mode whether or not to do so. They should return one of the following values:

    t
        A newline is to be inserted after the `;' or `,', and no more functions from the list are to be called.
    stop
        No more functions from the list are to be called, and no newline is to be inserted.
    nil
        No determination has been made, and the next function in the list is to be called.

    Note that auto-newlines are never inserted before a semicolon or comma. If every function in the list is called without a determination being made, then no newline is added.

    In AWK mode, this variable is set by default to nil. In the other modes, the default value is a list containing a single function, c-semi&comma-inside-parenlist. This inserts newlines after all semicolons, apart from those separating for-clause statements.

— Function: c-semi&comma-no-newlines-before-nonblanks

    This is an example of a criteria function, provided by CC Mode. It prevents newlines from being inserted after semicolons when there is a non-blank following line. Otherwise, it makes no determination. To use, add this function to the front of the c-hanging-semi&comma-criteria list.

              (defun c-semi&comma-no-newlines-before-nonblanks ()
                (save-excursion
                  (if (and (eq last-command-char ?\;)
                           (zerop (forward-line 1))
                           (not (looking-at "^[ \t]*$")))
                      'stop
                    nil)))
        

— Function: c-semi&comma-inside-parenlist

    — Function: c-semi&comma-no-newlines-for-oneline-inliners

        The function c-semi&comma-inside-parenlist is what prevents newlines from being inserted inside the parenthesis list of for statements. In addition to c-semi&comma-no-newlines-before-nonblanks described above, CC Mode also comes with the criteria function c-semi&comma-no-newlines-for-oneline-inliners, which suppresses newlines after semicolons inside one-line inline method definitions (e.g. in C++ or Java).

用法: 在c-hanging-colons-alist后
(c-hanging-colons-alist . ((case-label)
                               (label after)
                               (access-label after)
                               (member-init-intro before)
                               (inher-intro)))
    (c-hanging-semi&comma-criteria
     . (c-semi&comma-no-newlines-before-nonblanks
        c-semi&comma-inside-parenlist
        c-semi&comma-no-newlines-for-oneline-inliners))
分享到:
评论

相关推荐

    emacs缩进问题

    "emacs缩进问题"主要集中在如何设置和调整Emacs以适应特定的缩进规范,比如K&R(Kernel Normal Routine)、Allman或GNU等不同的缩进风格。 首先,我们需要理解Emacs中的缩进控制。在Emacs中,`electric-indent-mode...

    Emacs插件_Projectile

    Emacs是一款强大的文本编辑器,深受程序员和高级用户喜爱,其可扩展性是它的一大亮点。Projectile是一款专为Emacs设计的插件,旨在优化开发者在多项目环境中的工作流程,提升开发效率。通过集成Projectile,用户可以...

    emacs 和evil以及verilog mode全资源

    Verilog Mode是Emacs为Verilog语言设计的专用模式,提供了许多针对Verilog编程的便利功能,如语法高亮、自动缩进、宏定义和自动补全等。 在Emacs中安装和配置Evil插件,可以极大地提高开发效率,尤其是对于那些喜欢...

    emacs多年使用总结

    - **基本描述**: 支持XML和NXML (Namespace XML) 文档的自动缩进和格式化。 - **有用链接**: [Emacs Wiki关于XML模式的信息](https://www.emacswiki.org/emacs/XMLMode) ##### 1.10 Boxquote - **基本**: 用于创建...

    emacs python-mode 及使用方法

    4. **交互式Python shell**:使用`C-c C-z`可以在Emacs内部启动一个新的Python Shell(通过`python-shell`命令),实现代码测试和调试。 5. **文档查看**:`C-h f`查看函数文档,`C-h v`查看变量文档,`M-.`跳转到...

    emacs搭建python开发环境

    `python-mode.el`是Emacs中的Python编程模式,它提供了语法高亮、自动缩进、代码补全等功能,极大地提升了Python编程体验。`pycomplete.el`是Python代码补全工具,它能够与`python-mode.el`协同工作,提供智能提示,...

    emacs-22.3-barebin-i386.zip

    它可以通过内置的编程语言模式如Java Mode,提供语法高亮、自动缩进、代码补全等功能。此外,通过集成像JDEE(Java Development Environment for Emacs)这样的扩展,Emacs可以进一步增强对Java项目的调试和管理能力...

    Emacs Configure

    Emacs是一款强大的文本编辑器,深受程序员和程序员爱好者们的喜爱,因为它的高度可配置性和丰富的扩展功能。在Emacs的世界里,"配置"是至关重要的,因为它可以根据个人的工作需求进行定制,实现高效的工作流。本篇...

    我的emacs配置文件 linux

    3. **加载库和扩展**:`(require '库名)`用于加载Emacs库,`(add-to-list 'load-path "路径")`可以添加额外的搜索路径,以便找到自定义的库或插件。 4. **界面定制**:通过设置`frame`和`window`的属性,可以调整...

    C# emacs插件

    除了基本的语法高亮和补全,C#-mode可能还包括代码折叠、自动缩进、宏录制与播放、多文件项目管理等功能。Emacs的威力在于其强大的交互性,用户可以利用Elisp(Emacs Lisp)编写自定义函数,进一步扩展C#-mode的功能...

    使用Emacs开发iPhone应用程序的教程--千锋培训

    - **自动插入匹配的括号**:当输入左括号时自动添加相应的右括号。 - **缩进**:根据代码结构自动调整缩进。 - **选择矩形区域**:允许在非连续的多行之间选择文本。 - **语法检查**:实时检查代码语法错误。 - **...

    haskell-mode emacs

    2. **自动缩进**:根据 Haskell 的语法规则,`haskell-mode` 可以自动调整代码的缩进,保持代码整洁且遵循语言的规范。 3. **自动补全**:提供了基于当前项目和已安装库的代码补全功能,帮助开发者快速输入函数和...

    emacs教程

    - **自动缩进**:Emacs能够自动调整代码或文本的缩进,保持良好的格式。 - **文本属性**:可以为文本添加额外属性,例如字体加粗、斜体等。 #### 十九、程序编辑与调试 - **语法检查**:Emacs支持语法检查插件,...

    GNU Emacs的Scala学习开发环境配置

    这是一款为Emacs设计的Scala语言模式,它提供了语法高亮、自动缩进、代码补全、括号匹配等特性,极大地提升了Scala开发的便利性。在Emacs中,你可以通过MELPA(Marmalade Repository)或ELPA(Emacs Lisp Package ...

    EMACS使用手册.pdf

    - **日记记录**:支持日记条目的添加和查询。 #### 三十二、自定义设置 - **个性化配置**:支持用户自定义配置文件,实现高度个性化。 - **定制界面**:提供定制界面的功能,如菜单、工具栏等。 #### 三十三、...

    emacs_setting

    这段配置意味着Emacs将使用4个空格作为缩进单位,并且在新的缩进中使用空格而不是制表符。这对于保持代码整洁,特别是在多人协作的项目中,有着非常大的帮助。 除此之外,Emacs还允许用户定制各种快捷键,以提高...

    Emacs多年使用经验总结

    - **基本描述**:Emacs 支持对 NXML 和 XML 代码的自动缩进和格式化。 - **特点**: - 根据 XML 元素的嵌套结构自动调整缩进。 - 支持对标签进行自动闭合。 - **有用链接**:[Emacs XML 缩进文档]...

    Emacs Beginner‘s HowTo(Emacs入门指南英文版)

    用户可以在家目录下的`.emacs`文件中添加永久性的自定义设置,该文件在每次启动时会被加载。 ##### 4.3 Customize Package Emacs自带了一个名为Customize的包,它提供了一个友好的图形界面,用于管理各种设置。 ##...

    emacs-sql-indent:GNU Emacs中用于SQL文件的基于语法的缩进

    此外,`emacs-sql-indent`还提供了快捷键和命令来手动调整缩进,例如,`C-M-\`可以重排当前行的缩进,而`C-c C-i`则可以为当前光标所在语句进行正确的缩进。这些功能使得在Emacs中编写SQL代码更加高效。 为了更好地...

    emacs配置文件.7z

    用户可以在配置文件中定义各种模式的行为,如自动缩进、语法高亮、自动补全等。 4. **快捷键绑定**:Emacs使用键盘快捷键进行操作,用户可以根据个人习惯重新绑定快捷键,提高工作效率。 5. **自定义设置**:Emacs...

Global site tag (gtag.js) - Google Analytics