Emacs重新缩进整个C++缓冲区

16

我有一个C++代码文件,但它的缩进非常丑陋。我该如何告诉Emacs重新应用缩进到文件中?

4个回答

33

C-x h C-M-\

这两个命令选择整个缓冲区并运行indent-region


比上面的解决方案更简单!但是你如何实际敲击 \ 键呢? - Welgriv
我想这取决于您的键盘布局。我使用 ESC 作为 Meta,因此和弦的最后一部分是 ESC C-\。Mac 用户可能需要额外设置将 Alt 作为 Meta。 - eGlyph

8

以下是我放在~/.emacs.d/defuns.el文件中的“整个缓冲区缩进”代码。我还额外绑定了一个快捷键C-x \。这个代码还会清除所有悬挂的空格,并将制表符转换为它们的空格等效表示。

(defun indent-buffer ()                                                                                                                                                            
  "Indents an entire buffer using the default intenting scheme."                                                                                                                   
  (interactive)                                                                                                                                                                    
  (point-to-register 'o)                                                                                                                                                           
  (delete-trailing-whitespace)                                                                                                                                                     
  (indent-region (point-min) (point-max) nil)                                                                                                                                      
  (untabify (point-min) (point-max))                                                                                                                                               
  (jump-to-register 'o))                                                                                                                                                           

(global-set-key "\C-x\\" 'indent-buffer)                                                                                                                                           

编辑,包含 @JSONs 下面的建议将会让你得到一个如下所示的 defun:

(defun indent-buffer ()                                                                                                                                                            
  "Indents an entire buffer using the default intenting scheme."                                                                                                                   
  (interactive)                                                                                                                                                                    
  (save-excursion                                                                                                                                                                  
    (delete-trailing-whitespace)                                                                                                                                                   
    (indent-region (point-min) (point-max) nil)                                                                                                                                    
    (untabify (point-min) (point-max))))                                                                                                                                           

我测试了一下,它像以前一样有效。感谢JSON指出这一点。


与其使用指向寄存器和跳转到寄存器,不如使用save-excursion来包装重新格式化块。 - JSON

5

选中整个缓冲区,然后执行 M-x indent-region 命令。

参见此指南


1
(defun iwb ()
  "indent whole buffer"
  (interactive)
  (delete-trailing-whitespace)
  (indent-region (point-min) (point-max) nil)
  (untabify (point-min) (point-max)))

你可以使用这个小宏(我从http://emacsblog.org/2007/01/17/indent-whole-buffer/复制过来的)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接