Emacs 打开运行命令保存退出
Emacs open run command save exit
我在 Emacs 中对 C/C++ 项目使用 google-c-style.el。与许多 Emacs 模式一样,缩进是自动设置的。对于任何给定的文件,我可以打开它,select 整个文档,然后按 Tab 键重置所有缩进,保存,然后退出。
我有一个大型代码库,我想对其执行此过程,但我想从命令行或 shell 脚本自动执行此操作。完成此任务的最佳方法是什么?假设我已经找到了我想要 运行 的文件列表。
我还没有看到任何自动执行此操作的程序包。但是,我已经使用下面的模式来完成特定任务。您必须实现执行该工作的实际函数,在此示例中 (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)))))
Emacs batch mode 是这个问题的正确答案(感谢@lawlist)。 link 甚至还有一个 "indenting C files" 示例。
emacs --batch sample.cpp \
--eval '(indent-region (point-min) (point-max) nil)' \
-f save-buffer
根据 Emacs documentation,--batch 开关意味着 --no-init-file 使 Emacs 无法加载您的自定义配置。结果,我的缩进只是默认 C++ 模式的缩进,而不是我想要的 google-c-style。解决方案是告诉 Emacs 在打开文件之前加载您的设置文件。
emacs --load ~/.emacs.d/init.el \
--batch sample.cpp \
--eval '(indent-region (point-min) (point-max) nil)' \
-f save-buffer
您还可以创建一个 Emacs 脚本,并 运行 它在一组文件上,如图 here。
我在 Emacs 中对 C/C++ 项目使用 google-c-style.el。与许多 Emacs 模式一样,缩进是自动设置的。对于任何给定的文件,我可以打开它,select 整个文档,然后按 Tab 键重置所有缩进,保存,然后退出。
我有一个大型代码库,我想对其执行此过程,但我想从命令行或 shell 脚本自动执行此操作。完成此任务的最佳方法是什么?假设我已经找到了我想要 运行 的文件列表。
我还没有看到任何自动执行此操作的程序包。但是,我已经使用下面的模式来完成特定任务。您必须实现执行该工作的实际函数,在此示例中 (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)))))
Emacs batch mode 是这个问题的正确答案(感谢@lawlist)。 link 甚至还有一个 "indenting C files" 示例。
emacs --batch sample.cpp \
--eval '(indent-region (point-min) (point-max) nil)' \
-f save-buffer
根据 Emacs documentation,--batch 开关意味着 --no-init-file 使 Emacs 无法加载您的自定义配置。结果,我的缩进只是默认 C++ 模式的缩进,而不是我想要的 google-c-style。解决方案是告诉 Emacs 在打开文件之前加载您的设置文件。
emacs --load ~/.emacs.d/init.el \
--batch sample.cpp \
--eval '(indent-region (point-min) (point-max) nil)' \
-f save-buffer
您还可以创建一个 Emacs 脚本,并 运行 它在一组文件上,如图 here。