當我啓動我的R環境時,我經常運行長R腳本。我希望能夠在Emacs/ESS中加載/運行R腳本,並在其他緩衝區中繼續其他工作。我怎樣才能在ESS/Emacs中使用R進程?
當我按下C-g或C-c C-c時,過程中斷,我必須重新啓動腳本。
在ESS/Emacs中背景R過程的最佳方式是什麼?
編輯:感謝您的回答和評論,但他們都沒有解決Emacs在加載/運行大型腳本時無法凍結並且無法更改緩衝區這一事實。
我想我的問題是一個更一般的 - Emacs可以背景的過程,讓你繼續工作?
當我啓動我的R環境時,我經常運行長R腳本。我希望能夠在Emacs/ESS中加載/運行R腳本,並在其他緩衝區中繼續其他工作。我怎樣才能在ESS/Emacs中使用R進程?
當我按下C-g或C-c C-c時,過程中斷,我必須重新啓動腳本。
在ESS/Emacs中背景R過程的最佳方式是什麼?
編輯:感謝您的回答和評論,但他們都沒有解決Emacs在加載/運行大型腳本時無法凍結並且無法更改緩衝區這一事實。
我想我的問題是一個更一般的 - Emacs可以背景的過程,讓你繼續工作?
ESS將R運行爲異步進程。你不需要任何背景。你可以運行你的代碼幾個小時,並仍然可以在ESS中不間斷地工作。
你的問題似乎是別的。當你執行你的腳本時,你會「明顯地」執行它,即你的執行代碼被打印到終端上。這導致Emacs凍結。
設置ess-eval-visibly
到零和的代碼大塊將被髮送至R瞬間:
(setq ess-eval-visibly nil)
乾杯。
[更新]
沒有爲ess-eval-visibply
在最近版本的ESS的新設置 - 「NOWAIT。它將你的代碼放在一個劣質緩衝區中,然後發送給子進程。這樣你可以看到你的代碼和所有的輸出,而不用等待子進程完成。
[/ update]
如果您最終在不能評估emacs lisp的不同ess環境中,可以通過確保您的函數將其結果分配給變量來獲得相同的結果。而不是'long.running()'做'res < - long.running()'。 – Wilduck 2012-01-12 14:59:41
小更新:從ESS版本12.09-1開始,現在不推薦使用'ess-eval-visibly-p'。應該使用'ess-eval-visibly'。請參閱:http://ess.r-project.org/Manual/ess.html。 – Vince 2017-06-15 19:36:26
@Vince謝謝。我已經更新了答案。 – VitoshKa 2017-06-25 09:07:52
M-x R
將啓動R會話(默認緩衝區名稱爲*R*
)。如果再次按M-x R
,則將啓動第二個R會話(緩衝區名稱爲*R:2*
)。
每個會話都有自己的R進程,所以你可以在一個運行一個長的R腳本並且仍然獨立使用另一個。
按C-x C-b
調出緩衝區列表,這將允許您在R個會話之間切換。
或者,如果你把
(global-set-key "\C-cr" 'ess-request-a-process)
在.emacs
初始化文件,然後按C-c r
你會被提示輸入你想切換到其中R會話(緩衝)每次。如果你只有一個會話,它會自動切換到那裏。
已經有'ess-request-a-process' C-c C-k的綁定,但是由於某些特殊和完全未知的原因,它默認爲「S」,即使您將「R」設置爲默認值。 – aL3xa 2010-12-08 03:54:21
根據我個人的經驗,ESS不擅長處理非常大的腳本,因爲有時Emacs的其他部分變得無法使用。也許你最好在ESS中進行開發,然後在BATCH模式下運行完整的腳本。
使用C-C C-l來執行腳本。 – 2010-05-06 03:59:59