2013-05-29 53 views
9

我想下運行在遠程一個R當地Emacs(我希望在遠程機器上運行的Emacs)。emacs的流浪漢在不可靠的連接

我可以使用TRAMP在遠程主機上運行R

(let ((default-directory "/[email protected]:~")) 
    (R)) 

以及何時remote的連接丟失,R模具一切正常,只是。這是不好的,因爲這意味着重新啓動後需要將所有數據重新加載到R,這需要時間。

是否可以告訴TRAMP使用持久性終端? (GNU ScreentmuxMoshdtach

emacs-devel也螺紋tramp:sshx:(screen|tmux)見。

回答

8

下面是如何被R運行在遠程屏幕會話中使用ESS:

  • SSH到遠程主機(外的emacs的)

  • 開始屏幕會話

  • 分離它

  • 在emacs中打開shell(M-x shell

  • SSH到遠程主機再次在emacs的殼

  • 簡歷屏幕會議(screen -r

  • 開始ř

  • 最後附加ESS在外殼採用M-x ess-remote將R處理緩衝區你開始R

還有更多的細節,截圖和關鍵在這篇文章中http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/

+0

ESS開發者似乎認爲'ess-remote'已經過時了。 – sds

+0

好吧,函數本身相當簡單,它所做的只是設置一些變量並初始化緩衝區的低級模式以及一些特定於語言的自定義。我使用ess-remote來運行遠程R和SAS進程,並且沒有任何問題。你也可以在R啓動的ssh中使用它。el –

+2

@sds作爲ESS開發人員,我可以確保ess-remote已得到維護,並且正在改進 。我正在研究與ess和 tramp/ess-remote的屏幕集成。任何意見建議,歡迎。 – VitoshKa

6

這裏綁定是使用dtach一種替代方法:

(defvar R-remote-host "remote-server") 
(defvar R-remote-session "R") 
(defvar R-remote-directory "~") 
(defun R-remote (&optional remote-host session directory) 
    "Connect to the remote-host's dtach session running R." 
    (interactive (list 
       (read-from-minibuffer "R remote host: " R-remote-host) 
       (read-from-minibuffer "R remote session: " R-remote-session) 
       (read-from-minibuffer "R remote directory: " R-remote-directory))) 
    (pop-to-buffer (make-comint (concat "remote-" session) 
           "ssh" nil "-t" "-t" remote-host 
           "cd" directory ";" 
           "dtach" "-A" (concat ".dtach-" session) 
           "-z" "-E" "-r" "none" 
           inferior-R-program-name "--no-readline" 
           inferior-R-args)) 
    (ess-remote (process-name (get-buffer-process (current-buffer))) "R") 
    (setq comint-process-echoes t)) 

呼叫M-X R-遠程RET RET RET RET

它適用於我。

+0

感謝您的代碼。現在,當啓動遠程進程時,進程將從主目錄開始。我試圖修改你的代碼在特定的目錄下遠程打開R,但是在實現這個時遇到了一些問題。你有什麼辦法選擇進程應該開始的目錄嗎? – DJJ

+0

好吧,我只是在遠程主機完成這項工作之後添加''cd〜/ Documents/R;''行。非常感謝您的代碼,它爲我節省了很多麻煩。 – DJJ

+0

@DJJ:我加了'R-remote-directory',謝謝你的建議。 – sds