2013-09-30 48 views
1

我最近使用Vincent Goulet的Windows 7安裝程序在http://vgoulet.act.ulaval.ca/en/emacs/上從R 2.15和較早版本的ESS升級。這包括ESS 13.09版。我也剛剛安裝了R版本3.0.2。ess-execute key binding與新ESS版本不兼容

我的舊工作流是使用C-c C-t(默認鍵綁定)通過ess-execute運行命令並將結果發送到臨時緩衝區。我發現這對我的工作流程和R編程風格非常有用。

但是,使用新版本,此鍵綁定已被刪除。我四處搜索,找不到有關此主題的任何其他主題。我看着ess-mode.el並找到這條線:

;; (define-key map "\C-c\C-t" 'ess-execute-in-tb) 

哪個被註釋掉。我發現他們添加了很好的功能ess-describe-object-at-point,但是不允許執行命令。

我不是emacs高級用戶,所以我傾向於將lisp片段複製到我的.emacs中,並對它們進行小修改。我嘗試(1)取消註釋上面的行,(2)在我的.emacs文件中定義一個新的鍵綁定,與ESSShift Enter(http://www.emacswiki.org/emacs/ESSShiftEnter)中的新鍵綁定相同。

(add-hook 'ess-mode-hook 
    (lambda() 
    (local-set-key [(shift return)] 'my-ess-eval) 
    ;; added Ctrl-Enter to stay on same line 
    (local-set-key [C-return] 'ess-eval-line) 
    ;; Newest version of ESS got rid of C-c C-t for ess-execute add back 
    (local-set-key "\C-c\C-t" 'ess-execute-in-tb)) 

但是,這些方法都沒有奏效。

我的問題是:是否有這個鍵綁定在新版本中被禁用的原因?即我應該使用其他一些替代它的功能嗎?如果不是,那麼再次啓用此鍵綁定的最佳方法是什麼?

回答

1

ESS鍵在一年前被改造。 C-c C-t現在綁定到 dev-map,它提供了一些有用的功能,您可能希望在將來使用 。所以最好不要禁用它。你的代碼應該工作。您可能嘗試 C-c C-t來自*R*緩衝區,但那一個是inferior-ess-mode,而不是 ess-mode

你最好在ess-exta-map中定義你的密鑰,這樣它可以在 ess-mode和inferior-ess-mode中使用。事情是這樣的:

(eval-after-load "ess-mode" 
    '(progn 
    (define-key ess-extra-map "\C-e" 'ess-execute-in-tb))) 

eval-after-load的痛苦是必要的,因爲文森特的分配中的負載ESS用戶初始化文件加載後。如果您使用(load "ess-site")加載ESS,則可以將(define-key ...)部分保留在.emacs.el中。

現在C-C C-e C-e應該執行你的命令。

我將這個確切的關​​鍵添加到ESS開發版本。因此,在下一個版本 中,您可以刪除上述代碼。感謝您提出這個問題。

順便說C-RET勢必 ess-eval-region-or-line-and-step。你可能會考慮保持這樣。

+0

感謝您的回覆,我試了一下你的代碼,確實有效。之前我犯了一個錯誤,那就是爲什麼我的代碼不起作用。 我真的很喜歡ess-execute功能,但我注意到新版本的一件事是完成不起作用。即如果我執行M-x ess-execute然後鍵入st並且它表示「沒有與此緩衝區關聯的ESS進程」 - 是否有簡單的方法可以恢復此功能? 感謝您對所有改進進行研究,我無法想象沒有ESS的編碼在這一點上! –

+0

@ColeMonnahan感謝您指出這一點。我剛剛在ESS中修復了它。 – VitoshKa