我正在尝试从RStudio迁移到emacs ess 我现在正在尝试在emacs ess中找到自动完成功能 类似于Rstudio
对于我的问题,我将使用一个简单的RStudio示例 如果你能告诉我如何做同样的事情,我将不胜感激 emacs ess(目的当然是概括):
RStudio
中的
在parentesis内部当我输入文字
libr
,然后按TAB我得到library()
当我输入" tidyv"那样:library(tidyv)
然后TAB我得到library(tidyverse)
请您按照简单的步骤描述我如何在emacs ess中做同样的事情?
由于
圣拉斐尔
答案 0 :(得分:3)
这应该适用于最近backend addition之后的默认公司后端。您只需要从melpa更新您的ESS。如果company-R-library
不属于ESS缓冲区中的company-backends
,请将其添加到ESS模式挂钩中。请注意,您应该设置ess-use-company
。
在回复评论时,ess-use-company
是您应在配置中设置为t
的变量,而不是使用 M-x 调用的函数。我假设您有一个init文件,如果没有,您可以轻松找到相关信息。无论你在init文件中保存ess的配置,你都可以添加(虽然这是默认值,所以除非你设置ess-use-auto-complete
,否则这可能已经设置了)
(setq ess-use-company t)
每个模式都有一个钩子,它是一个在缓冲区中设置后运行的功能,允许用户自定义模式。您可以使用(add-hook 'ess-mode-hook 'my-ess-mode-hook)
添加此类挂钩,其中my-ess-mode-hook
是您使用自定义编写的函数,例如。 (company-mode)
除非您在全球范围内(最有可能)启用此功能。
company-backends
也是一个变量,您可以在ESS缓冲区中键入 M - : company-backends
来评估lisp代码以查看该变量的值。确保从melpa重新安装最新版本的ESS。
编辑:要测试的完整初始化 - company-R-library
可能尚未添加到默认后端
(setq-default package-archives
'(("melpa" . "http://melpa.milkbox.net/packages/")
("gnu" . "http://elpa.gnu.org/packages/")))
(setq package-enable-at-startup nil)
(package-initialize)
;;; company
(require 'company)
(setq tab-always-indent 'complete)
(setq company-idle-delay 0.5
company-show-numbers t
company-minimum-prefix-length 2
company-tooltip-flip-when-above t)
(global-set-key (kbd "C-M-/") #'company-complete)
(global-company-mode)
;;; ESS
(defun my-ess-hook ()
;; ensure company-R-library is in ESS backends
(make-local-variable 'company-backends)
(cl-delete-if (lambda (x) (and (eq (car-safe x) 'company-R-args))) company-backends)
(push (list 'company-R-args 'company-R-objects 'company-R-library :separate)
company-backends))
(add-hook 'ess-mode-hook 'my-ess-hook)
(with-eval-after-load 'ess
(setq ess-use-company t))
使用
启动emacsemacs -Q -l /path/to/this/init.el
打开一个R文件,启动劣质R进程,然后键入library(ti
M-C - / ,你应该得到包完成。
答案 1 :(得分:1)
好的,所以我让它为我工作,很好地完成了以下设置和步骤:
init.el
package-install [RET] company
package-install [RET] ess
M-x company-mode
在当前缓冲区中启用company-mode
此时,自动完成功能会自动弹出R对象的完成建议。必须在括号内触发自动完成。假设我将光标放在shiny:runApp()
的函数括号内。要获得函数参数的完成建议,我需要运行命令company-complete
。
您使用M-x company-complete
或M-x company-complete-common
执行此操作,您应该看到以下内容:
我决定使用init.el中的以下行将其绑定到Shift-Tab:
(global-set-key (kbd "<backtab>") 'company-complete-common)
通过以下方式全局启用公司模式:
(add-hook 'after-init-hook 'global-company-mode)