2010-05-25 93 views

回答

17

我已經設置一些快捷鍵R控制檯源文件跳我的.emacs文件。最有用的是:

C-標籤到R命令行和文件之間進行切換(類似於JOSH答案,但要快得多):

(global-set-key [C-tab] 'other-window) 

控制和上/下箭頭鍵來搜索記錄與之搭配你已經鍵入:

(define-key comint-mode-map [C-up] 'comint-previous-matching-input-from-input) 
(define-key comint-mode-map [C-down] 'comint-next-matching-input-from-input) 

註釋,取消註釋選定區域的CD或C-少校-d

(defun uncomment-region (beg end) 
    "Like `comment-region' invoked with a C-u prefix arg." 
    (interactive "r") 
    (comment-region beg end -1)) 

(define-key ess-mode-map (kbd "C-d") 'comment-region) 
(define-key ess-mode-map (kbd "C-S-d") 'uncomment-region) 

而且我也啓用CUA模式(從選項菜單),並重新配置了不少的快捷方式到僅需要兩個按鍵(而不是四個在標準模式下):

;; Delete selection when pressing [delete] key 
    (delete-selection-mode t) 

;; ESS Mode (.R file) 
    (define-key ess-mode-map "\C-l" 'ess-eval-line-and-step) 
    (define-key ess-mode-map "\C-p" 'ess-eval-function-or-paragraph-and-step) 
    (define-key ess-mode-map "\C-r" 'ess-eval-region) 

;; iESS Mode (R console) 
    (define-key inferior-ess-mode-map "\C-u" 'comint-kill-input) 
    (define-key inferior-ess-mode-map "\C-w" 'backward-kill-word) 
    (define-key inferior-ess-mode-map "\C-a" 'comint-bol) 
    (define-key inferior-ess-mode-map [home] 'comint-bol) 

;; Comint Mode (R console as well) 
    (define-key comint-mode-map "\C-e" 'comint-show-maximum-output) 
    (define-key comint-mode-map "\C-r" 'comint-show-output) 
    (define-key comint-mode-map "\C-o" 'comint-kill-output) 

;; Search with C-f/C-F (control-maj-F for backware search) 
    (global-set-key "\C-f" 'isearch-forward) 
    (global-set-key (kbd "C-S-f") 'isearch-backward) 
    (define-key isearch-mode-map "\C-f" 'isearch-repeat-forward) 
    (define-key isearch-mode-map (kbd "C-S-f") 'isearch-repeat-backward) 

;; Save with C-s/C-S 
    (global-set-key (kbd "C-s") 'save-buffer) 
    (global-set-key (kbd "C-S-s") 'write-file) 
    ;; need to redefine them for isearch mode (don't know why) 
    (define-key isearch-mode-map (kbd "C-s") 'save-buffer) 
    (define-key isearch-mode-map (kbd "C-S-s") 'write-file) 

;; Pause = dedicate window. 
    (defun toggle-current-window-dedication() 
    (interactive) 
    (let* ((window (selected-window)) 
      (dedicated (window-dedicated-p window))) 
    (set-window-dedicated-p window (not dedicated)) 
    (message "Window %sdedicated to %s" 
       (if dedicated "no longer " "") 
       (buffer-name)))) 
    (global-set-key [pause] 'toggle-current-window-dedication) 

;; delete = delete 
    (global-set-key [delete] 'delete-char) 

;; C-b = list buffers 
    (global-set-key (kbd "C-b") 'bs-show) 

你會發現更多有用的快捷鍵在ESS documentation

+2

我可以在沒有選擇代碼的情況下將Ctrl r修改爲ess-eval-line-and-step,並且在選擇代碼時可以修改ess-eval-region?這將使它更像Rgui.exe。 – ggg 2010-05-27 07:45:48

+0

最近有沒有更改上述代碼?當我嘗試使用這些鍵綁定(在窗口上)時,comint-mode映射和ess-mode-map設置出現錯誤。 – Anusha 2013-06-16 02:18:59

+0

在emacs 24(osx 10.10)上,取消註釋區域函數報告錯誤:錯誤的參數數目。 – qed 2014-11-01 22:29:48

5

抄送鋯石ESS-交換機到結束ESS

是很好的,你正在編輯foo.R到

2

偉大的東西,一直在使用它的年齡。不幸的是截至2013年11月15日,取消註釋鍵綁定可能無法工作,因爲EMACS的變化(我認爲,至少它是在我加載最新版本之前工作)。這是因爲默認的取消註釋函數有3個參數,但是上面定義的取值有2個。解決這個問題的最好方法是簡單地從代碼中刪除取消註釋功能並保留鍵綁定,因此它使用默認的取消註釋功能。或者換句話說,只要使用此:

  • (定義鍵ESS模式地圖(KBD「CD」)「評論區)
  • (定義鍵ESS模式地圖(KBD「CSD 「)'uncomment-region)
0

Mn和Mp在ESS R控制檯中用於下一個/上一個命令。