Emacs C++ - 模式不正确的缩进?

Ida*_*n K 35 c++ emacs indentation

我正在使用c ++模式运行emacs 23并且存在一些缩进问题.假设我有这个代码:

void foo()
{
   if (cond)
     { <---
        int i;
        ...
     } <---
}
Run Code Online (Sandbox Code Playgroud)

这似乎是自动缩进的默认行为.但是我想改变它所以它会是这样的:

void foo()
{
   if (cond)
   {
      int i;
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法通过配置c ++模式或我的.emacs文件轻松完成此操作?

Ale*_*x B 41

我的.emacs文件中有以下内容:

(defun my-c++-mode-hook ()
  (setq c-basic-offset 4)
  (c-set-offset 'substatement-open 0))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
Run Code Online (Sandbox Code Playgroud)

您可以通过在任何行上按[ctrl-c ctrl-s]来确定要编辑的偏移量.if它会在第一行用支撑后说出来substatement-open.


jus*_*nhj 22

这是我的......这与visual studio的默认设置相匹配.

(defun my-c-mode-common-hook ()
 ;; my customizations for all of c-mode, c++-mode, objc-mode, java-mode
 (c-set-offset 'substatement-open 0)
 ;; other customizations can go here

 (setq c++-tab-always-indent t)
 (setq c-basic-offset 4)                  ;; Default is 2
 (setq c-indent-level 4)                  ;; Default is 2

 (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60))
 (setq tab-width 4)
 (setq indent-tabs-mode t)  ; use spaces only if nil
 )

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
Run Code Online (Sandbox Code Playgroud)

  • (setq c-default-style"bsd"c-basic-offset 4)在较少的行中完成了很多.虽然缩进标签模式应该保留. (7认同)

Col*_*lin 9

简短回答:将此行放入.emacs文件中:

(c-set-offset 'substatement-open 0)
Run Code Online (Sandbox Code Playgroud)

答案很长:......

对于我们这些刚接触emacs-lisp的人来说,http : //www.cs.cmu.edu/上有一个非常简单的方法:

  • 转到要缩进的行

  • 键入CC CO(字母"O",不是零)

  • Enter键接受默认建议

  • 键入"0"(即零),无需额外缩进,按Enter键

  • 键入Tab以重新加入该行.

  • 在这种情况下,未来"{"将具有正确的选项卡设置,直到您重新启动emacs.

这个方法的好处是,您实际上可以看到要更改的lisp代码.您可以输入.emacs文件:

(c-set-offset 'SYNTACTIC-SYMBOL OFFSET)
Run Code Online (Sandbox Code Playgroud)

此外,您可能需要查看程序AStyle以自动格式化emacs之外的C++源代码.