Emacs打开运行命令保存退出

时间:2015-05-06 03:33:10

标签: shell emacs

我在Emacs中使用google-c-style.el用于C / C ++项目。与许多Emacs模式一样,缩进是自动设置的。对于任何给定的文件,我可以打开它,选择整个文档,然后按Tab重置所有缩进,保存,然后退出。

我有一个很大的代码库,我想要执行此过程,但我想从命令行或shell脚本自动执行此操作。完成此任务的最佳方法是什么?假设我已经找到了我想要运行它的文件列表。

2 个答案:

答案 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)))))