Emacs ESS/R的有用键盘快捷键和提示

Emacs ESS/R的有用键盘快捷键和提示,emacs,r,elisp,ess,Emacs,R,Elisp,Ess,我想问问普通ESS/R用户他们经常使用什么键绑定,以及使用ESS/R的提示。C-C-z ESS切换到ESS的末尾 很高兴从正在编辑foo.R的源文件跳转到R控制台我在.emacs文件中设置了几个快捷方式。最有用的是: C-tab在R命令行和文件之间切换(类似于josh answer,但速度要快得多): 控制键和上/下箭头键以搜索与您已键入内容相匹配的历史记录: (define-key comint-mode-map [C-up] 'comint-previous-matching-input-f

我想问问普通ESS/R用户他们经常使用什么键绑定,以及使用ESS/R的提示。

C-C-z ESS切换到ESS的末尾


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

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

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

控制键和上/下箭头键以搜索与您已键入内容相匹配的历史记录:

(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)
注释用C-d或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模式(从选项菜单),并重新配置了许多快捷方式,使其只需两次击键(而不是标准模式下的四次击键):


您将在中找到更多有用的快捷方式。

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


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

  • (定义键ess模式映射(kbd“C-d”)'注释区域)
  • (定义键ess模式映射(kbd“C-S-d”)'取消注释区域)

ESS R控制台中的M-n和M-p用于下一个/上一个命令。

我是否可以在未选择代码时将Ctrl R修改为ESS eval line和step,在选择代码时将其修改为ESS eval region?这将使其更像Rgui.exe。最近对上述代码有任何更改吗?当我尝试使用这些键绑定(在windows上)时,comint模式映射和ess模式映射设置出现错误。在emacs 24(osx 10.10)上,取消注释区域函数报告错误:参数数错误。好的,看来取消注释区域函数是多余的。毕竟,ess中有一个同名函数。
(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)
;; 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)