我在Emacs中使用google-c-style.el用于C / C ++项目。与许多Emacs模式一样,缩进是自动设置的。对于任何给定的文件,我可以打开它,选择整个文档,然后按Tab重置所有缩进,保存,然后退出。
我有一个很大的代码库,我想要执行此过程,但我想从命令行或shell脚本自动执行此操作。完成此任务的最佳方法是什么?假设我已经找到了我想要运行它的文件列表。
答案 0 :(得分:1)
Emacs post.是解决此问题的正确答案(感谢@lawlist)。该链接甚至有一个“缩进C文件”示例。
emacs --load ~/.emacs.d/init.el \
--batch sample.cpp \
--eval '(indent-region (point-min) (point-max) nil)' \
-f save-buffer
根据Emacs batch mode, - block switch意味着--no-init-file使Emacs无法加载自定义配置。结果,我的缩进只是默认的C ++模式,而不是我想要的google-c风格。解决方案是告诉Emacs在打开文件之前加载您的设置文件。
{{1}}
您还可以创建一个Emacs脚本,并在一组文件上运行它,如documentation所示。
答案 1 :(得分:0)
我没有看到任何自动执行此操作的程序包。但是,我使用下面的模式来完成特定任务。您必须实现执行工作的实际功能,在此示例中为(my-do-something)
。
(defun my-do-something-file (f)
(let ((buf (get-file-buffer f))
(kill-it nil))
(unless buf
(setq buf (find-file-noselect f))
(setq kill-it t))
(save-excursion
(set-buffer buf)
(unless buffer-read-only
(my-do-something) ;; Implement this.
(let ((require-final-newline nil))
(save-buffer))))
(when kill-it
(kill-buffer buf))))
(defun my-do-something-directory (dir)
(interactive "DDirectory: ")
(dolist (f (directory-files dir t))
(if (not (member (file-name-nondirectory f) '("." ".." ".svn")))
(if (file-directory-p f)
(my-do-something-directory f)
(my-do-something-file f)))))