自动保存和编译

ant*_*009 6 emacs

GNU 23.1.1

通过单击F5按钮,我可以编译我的项目.但是,我想扩展它,以便保存任何未保存的工作然后编译.

通常我只是执行Cxs保存然后单击F5.但是我可以添加一行保存而不必问我是否要保存然后它会编译,所有都自动完成?

; Compile program using <F5>
; Save all unsaved files here, then compile
(global-set-key [f5] 'compile)
Run Code Online (Sandbox Code Playgroud)

希望你能理解我?

非常感谢任何建议,

Mat*_*tis 19

(setq compilation-ask-about-save nil)你的.emacs自动保存(不问)您编译或重新编译了.


Rém*_*émi 15

在我使用的每个Emacs上(从19.34到24),编译确实要求在继续之前保存未保存的缓冲区.我很惊讶你不是这样的.

所以只需Mx编译(f5为你)将要求保存未保存的缓冲区.

如果你想编译无条件地保存所有缓冲区,你可以自定义编译 - ask-about-save为nil,或者如果你想被问到,可以将它设置为默认的非零值.

  • 然后自定义编译 - 询问 - 保存.它只是为了这个(保存所有缓冲区,在编译之前没有询问)? (4认同)
  • 是的你是对的。它确实要求您保存。但是,我不希望出现提示,而是在每次编译时保存任何内容。通常我总是打开超过 1 个缓冲区,我只想保存任何内容,而不需要每次编译时都提示。 (2认同)

Mic*_*zyk 8

您可以使用(save-some-buffers 1)保存包含更改的所有缓冲区.

用一个函数包装它,compile如下所示:

(defun save-all-and-compile ()
  (save-some-buffers 1)
  (compile compile-command))
Run Code Online (Sandbox Code Playgroud)

然后设置F5以运行此函数而不是纯编译.

(save-some-buffers)如果您更喜欢Emacs询问有关要保存的每个缓冲区,请使用(无参数).此外,您可能希望使编译命令可自定义,因为它compile...我会留给您的.


让它工作

您还必须添加(interactive),请参阅下面的完整示例.

(defun save-all-and-compile ()
  (interactive)
  (save-some-buffers 1)
  (compile compile-command))
(global-set-key [f5] 'save-all-and-compile)
Run Code Online (Sandbox Code Playgroud)

  • 我建议你在主打字区域使用一个键(或一个组合),而不是像F5那样使用它来做到这一点. (3认同)
  • 获取此错误`command-execute:错误的类型参数:commandp,save-all-and-compile`在添加此行后键入F5`(global-set-key [f5]'save-all-and-compile)`for绑定密钥.我在使用Emacs 24.5.1. (3认同)