26

我想问一下普通的 ESS/R 用户他们经常使用哪些键绑定以及使用 ESS/R 的提示。

4

5 回答 5

17

我在 .emacs 文件中设置了几个快捷方式。最有用的是:

C-tab 在 R 命令行和文件之间切换(类似于 josh answer,但要快得多):

(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-maj-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 文档中找到更多有用的快捷方式。

于 2010-05-25T09:18:55.953 回答
5

Cc Cz ess-switch-to-end-of-ESS

很高兴从您正在编辑 foo.R 的源文件跳转到 R 控制台

于 2010-05-25T05:13:29.177 回答
2

我发现这个链接非常有帮助。它提供了 elisp 代码以使 Shift+Enter 以上下文相关的方式执行许多常见任务。

http://kieranhealy.org/blog/archives/2009/10/12/make-shift-enter-do-a-lot-in-ess/

于 2013-08-23T22:38:42.843 回答
2

好东西,用了好多年了。不幸的是,截至 2013 年 11 月 15 日,由于 EMACS 更改,取消注释键绑定可能无法正常工作(我认为,至少在我加载最新版本之前它可以工作)。这是因为默认取消注释函数有 3 个参数,但上面定义的有 2 个参数。解决此问题的最佳方法是简单地从代码中删除取消注释函数并保留键绑定,因此它使用默认取消注释函数。或者换句话说,只是使用这个:

  • (define-key ess-mode-map (kbd "Cd") 'comment-region)
  • (define-key ess-mode-map (kbd "CSd") 'uncomment-region)
于 2013-11-15T02:54:58.587 回答
1

ESS R 控制台中的 Mn 和 Mp 用于下一个/上一个命令。

于 2014-10-27T15:34:09.263 回答