2010-05-25 78 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控制台中用于下一个/上一个命令。