我正在尝试从 RStudio 迁移到 emacs ess,现在我正在尝试在 emacs ess 中找到类似于 Rstudio 的自动完成功能
对于我的问题,我将使用一个简单的 RStudio 示例,如果您能告诉我如何在 emacs ess 中执行相同的操作,我将不胜感激(目的当然是概括):
在RStudio
当我输入文本
libr
然后按 TAB 时我得到library()
括号内
当我像这样输入“tidyv”时:
library(tidyv)
然后按 TAB 键我得到library(tidyverse)
您能否以简单的逐步方式描述我如何在 emacs ess 中执行相同的操作?
谢谢
拉斐尔
在最近添加后端后,这应该适用于默认的公司后端。您只需要从 melpa 更新您的 ESS。如果company-R-library
不是company-backends
ESS 缓冲区的一部分,只需将其添加到 ESS 模式挂钩中。请注意,您应该已经设置了ess-use-company
.
作为对评论的回应,ess-use-company
是您应该在配置中设置的变量t
,而不是使用M-x. 我假设您有一个初始化文件,如果没有,您可以轻松找到有关该文件的信息。无论您将 ess 的配置保存在 init 文件中的何处,您都可以添加(尽管这是默认设置,所以除非您设置ess-use-auto-complete
,否则这可能已经设置)
(setq ess-use-company t)
Run Code Online (Sandbox Code Playgroud)
每个模式都有一个钩子,它是在缓冲区中设置后运行的函数,允许用户自定义模式。您可以使用 添加这样的挂钩(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))
Run Code Online (Sandbox Code Playgroud)
启动 emacs
emacs -Q -l /path/to/this/init.el
Run Code Online (Sandbox Code Playgroud)
打开一个 R 文件,启动下级 R 进程,然后键入library(ti
M-C-/,您应该会得到包完成结果。