2010-01-14 89 views
6

GNU 23.1.1保存並自動編譯

通過單擊F5按鈕我可以編譯我的項目。但是,我想擴展它,以便任何未保存的工作將被保存並編譯。

通常我只是做C-x-s保存然後點擊F5。但是,我可以添加一行可以保存而不必問我是否要保存,那麼它會編譯,全部自動完成?

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

希望你能理解我嗎?

非常感謝任何建議,

+0

我想你問的是如何讓Emacs在編譯時自動保存?請查看下面的答案以瞭解如何執行此操作。 – 2010-06-07 00:55:04

+0

儘管與你所要求的有所不同,但是添加'save-hook-hook'後的配方對我來說是個訣竅 - http://rtime.felk.cvut.cz/~sojka/blog/compile- on-save/ – Manav 2014-03-29 16:10:55

回答

7

您可以使用(save-some-buffers 1)保存包含更改的所有緩衝區。

與函數與compile一起把它包起來,像這樣:

(defun save-all-and-compile() 
    (save-some-buffers 1) 
    (compile compile-command)) 

然後設置F5運行該功能,而不是簡單的編譯。

使用(save-some-buffers)(無參數)如果您希望Emacs詢問您要保存的每個緩衝區。此外,你可能想要編譯命令可定製,因爲它與compile ...我會留給你的。

+3

我建議你在主要的打字區域使用一個鍵(或一個組合),而不是像F5這樣做的事情。 – 2010-01-14 06:17:45

+2

在添加此行後輸入F5時,獲取此錯誤'command-execute:錯誤的類型參數:commandp,save-all-and-compile''(global-set-key [f5]'save-all-and-compile)用於綁定密鑰。我在Emacs 24.5.1上。 – 2016-02-06 14:38:02

13

在我使用的每一個Emacs(從19.34到24)中,compile都要求在繼續之前保存未保存的緩衝區。我很驚訝,你不是這種情況。

所以只需M-x編譯(f5爲你)將要求保存未保存的緩衝區。

如果您希望編譯無條件地保存所有緩衝區,或者如果您想要將其設置爲默認非零值,您可以自定義編譯問題關於保存爲零。

+0

是的,你是對的。它確實要求你保存。但是,我不希望被提示,而是在每次編譯時保存任何內容。通常,我總是打開多於1個緩衝區,並且我只想保存任何內容而不會提示每次編譯。 – ant2009 2010-01-14 08:17:49

+3

然後自定義編譯 - 請求關於保存。這只是爲了(在編譯之前保存所有的緩衝區而不要詢問)? – 2010-01-14 08:59:38

15

(setq compilation-ask-about-save nil)放入您的.emacs中,在編譯或重新編譯之前自動保存(無需詢問)。