如何設置emacs,以便在新編譯期間瀏覽以前的編譯錯誤?在新編譯期間瀏覽以前的編譯錯誤?
兩件事情不爲我工作:
-
當第二編譯正在進行
M-克間克(下一個錯誤)功能無法正常工作。
我有我的emacs分成5個不平坦的窗口(拆分窗口水平),編譯「窗口」是兩倍的大小(dbl顯示器設置)。當我啓動編譯時,它總是出現在最後一個雙編譯窗口中。現在它爲自己打開一個新窗口。
如何設置emacs,以便在新編譯期間瀏覽以前的編譯錯誤?在新編譯期間瀏覽以前的編譯錯誤?
兩件事情不爲我工作:
M-克間克(下一個錯誤)功能無法正常工作。
我有我的emacs分成5個不平坦的窗口(拆分窗口水平),編譯「窗口」是兩倍的大小(dbl顯示器設置)。當我啓動編譯時,它總是出現在最後一個雙編譯窗口中。現在它爲自己打開一個新窗口。
這是一個有點的未完善,但試試這個:
開始新的編譯之前,請保存(寫,C-X C-W)當前編譯緩衝區中的文件。如果新文件的緩衝區放棄了「編譯模式」設置,只需重新打開編譯模式(M-x編譯模式)即可。
這聽起來像一個合理的方法。但我無法手動完成。而且,當新的編譯完成時,我希望它覆蓋舊的錯誤列表。也許我們可以修改編譯命令以編譯到某個臨時緩衝區,並在完成後將它移動到\ * compilation \ *中。 –
這裏是一個解決方案,這似乎滿足您的所有需求:
*compilation-old*
緩衝區始終保持在同一個窗口next-error
不破*compilation-old*
當編譯過程終止時(defun my-compilation-finish-function (buffer msg)
;; Don't do anything if we are in a derived mode
(when (with-current-buffer buffer (eq major-mode 'compilation-mode))
;; Insert the last compilation output at the end of *compilation-old*
(if (get-buffer "*compilation-old*")
(with-current-buffer "*compilation-old*"
(save-excursion
(goto-char (point-max))
(insert-buffer buffer)))
(with-current-buffer buffer
(rename-buffer "*compilation-old*")))))
(add-hook 'compilation-finish-functions 'my-compilation-finish-function)
(defadvice compile (around my-compile-show-old activate)
"Show the *compilation-old* buffer after starting the compilation"
(let ((buffer (current-buffer)))
(when (get-buffer "*compilation-old*")
(pop-to-buffer "*compilation-old*")
(switch-to-buffer "*compilation*"))
ad-do-it
(when (get-buffer "*compilation-old*")
(switch-to-buffer "*compilation-old*")
(pop-to-buffer buffer))))
2件事對我不起作用:1.當第二次編譯正在進行時,M-g M-g(nex-error)函數不起作用。 2.我將emacs分成5個不平坦窗口(水平分割窗口),編譯窗口的大小是雙倍大小(dbl moniotr設置)。當我啓動編譯時,它總是出現在最後一個雙編譯窗口中。現在它爲自己開闢了一扇新窗口。 –
至於問題1,你是否按照內聯幫助中描述的方式嘗試使用'next-error'?首先在要用作源代碼的編譯緩衝區中運行'next-error'(在您的情況下爲'* compilation-old *'),然後所有連續的'next-error'調用將使用此緩衝區。 – Francesco
對於問題2,我不明白你想在雙倍窗口中看到哪個緩衝區;舊的還是跑步的? – Francesco
在編譯命令終止時,將以下內容放入init文件中將會將編譯緩衝區重命名爲*compilation-old*
。
請注意,如果您從舊編譯緩衝區中的新編譯過程(將在這種情況下,再利用,而不是創建一個新的緩衝,因爲compile
)
(defun my-rename-compilation-buffer (buffer message)
;; Don't do anything if we are in a derived mode
(when (with-current-buffer buffer (eq major-mode 'compilation-mode))
(let* ((old-compilation-buffer-name "*compilation-old*")
(old-compilation-buffer (get-buffer old-compilation-buffer-name)))
;; Kill old compilation buffer if necessary
(when old-compilation-buffer
(kill-buffer old-compilation-buffer))
;; Rename the current compilation buffer
(with-current-buffer buffer
(rename-buffer old-compilation-buffer-name)))))
(add-hook 'compilation-finish-functions 'my-rename-compilation-buffer)
仍然是同樣的問題:1.(next-error)僅在新窗口中使用編譯錯誤。即使我從第二個舊編譯緩衝區執行(下一個錯誤)。 –
考慮它的可編程的,這是行不通的,答案是肯定的。 –
你能否詳細解釋一下目前的答案缺乏哪些細節? – Francesco
@Francesco - 忘記添加解釋什麼不工作 - 在評論中添加到您的答案。 –