我已将(global-set-key "\C-x\C-m" 'compile)
放入.emacs
。因此,在Emacs
下,如果我使用快捷方式C-x C-m C-m
,1)我会被问到是否要保存修改; 2)将在Emacs
下打开另一个缓冲区,其中显示编译(此外,它没有系统地显示编译结束,我们需要手动浏览)。
是否可以不让包含编辑的缓冲区干扰?
理想情况下,我希望C-x C-m C-m
切换编译(我希望默认保存修改)。如果没有错误,我不想看到编辑屏幕;否则,我会找到屏幕并看到错误信息。
有谁知道是否可以设置它?
修改1:
根据@maxy的回答,我修改了.emacs
并做了一些测试。奇怪的是,有两种情况:
1)如果先前的编译成功,另一个编译将生成一个缓冲区,然后在编译后不会删除缓冲区:
2)如果先前的编译没有成功,在删除编译缓冲区并纠正tex文件中的错误后,另一个编译将生成一个缓冲区,然后在编译后删除缓冲区。
有谁知道如何修复它?
编辑2:
我知道了。在@maxy的答案中,将(run-at-time 0.5 nil 'delete-windows-on buf)
更改为(run-at-time 0.5 nil 'delete-other-windows)
即可。
答案 0 :(得分:2)
我很久以前就解决了这个问题,我认为这是默认的emacs。可悲的是,事实并非如此。来自我的emacs.el:
;; get rid of compilation window on success
;; source: http://www.bloomington.in.us/~brutt/emacs-c-dev.html [dead link]
(setq compilation-finish-function
(lambda (buf str)
(if (string-match "exited abnormally" str)
;;there were errors
;(message "compilation errors, press C-x ` to visit")
(message "ERRORs while compiling.")
;;no errors, make the compilation window go away in 0.5 seconds
(run-at-time 0.5 nil 'delete-windows-on buf)
(message "Compilation done."))))
另外,请使用M-x customize-variable
:
'(compilation-ask-about-save nil)
'(compilation-context-lines 0)
'(compilation-scroll-output t)
'(compilation-window-height 21)
如果您使用的是swbuff
,请参阅swbuff-exclude-buffer-regexps
的示例,忽略最近使用的缓冲区列表中的*compilation*
缓冲区。
答案 1 :(得分:1)
从EmacsWiki,将以下内容放入.emacs:
;; If there were no compilation errors, delete the compilation window
(setq compilation-exit-message-function
(lambda (status code msg)
;; If M-x compile exists with a 0
(when (and (eq status 'exit) (zerop code))
;; then bury the *compilation* buffer, so that C-x b doesn't go there
(bury-buffer "*compilation*")
;; and return to whatever were looking at before
(replace-buffer-in-windows "*compilation*"))
;; Always return the anticipated result of compilation-exit-message-function
(cons msg code)))
这实际上会短暂显示窗口,但如果没有错误则立即删除它,恢复它所替换的任何窗口。
此外,您可以使Emacs滚动到第一个错误或滚动到编译缓冲区的末尾,如下所示:
(require 'cl)
(setq
;; Either
compilation-scroll-output 'first-error ;; scroll until first error
;; or
compilation-scroll-output 't ;; scroll to bottom
)