emacs ess:如何自动完成库函数
emacs ess : how to auto complete library function
我正在尝试从 RStudio 迁移到 emacs ess
我现在正在尝试在 emacs ess 中找到自动完成功能
类似于 Rstudio
对于我的问题,我将使用一个简单的 RStudio 示例
如果你能告诉我如何做同样的事情,我将不胜感激
emacs ess(目的当然是泛化):
在 RStudio
when i type the text libr
and then press TAB I get library()
括号内
when i type "tidyv" like that: library(tidyv)
and then TAB i get library(tidyverse)
你能用简单的步骤描述一下我如何在 emacs ess 中做同样的事情吗?
谢谢
拉斐尔
好的,所以我让它为我工作,通过以下设置和步骤非常好:
- Windows 10 x64
- R 3.4.3 x64
- Emacs 25 x64 安装正常
- MELPA 存储库已在
init.el
中启用
package-install [RET] company
package-install [RET] ess
- 在某个目录中打开一个新的 R 文件
M-x company-mode
在当前缓冲区中启用 company-mode
- `C-c C-z' 启动劣质 R 进程(没有这个将无法工作)
此时,autocomplete会自动弹出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)
在最近的 backend addition 之后,这应该适用于默认值 company-backend。您只需要从 melpa 更新您的 ESS。如果 company-R-library
不是 ESS 缓冲区中 company-backends
的一部分,只需将其添加到 ESS 模式挂钩中即可。请注意,您应该设置 ess-use-company
.
针对评论,ess-use-company
是您应该在配置中设置为 t
的变量,而不是使用 M-x[=44 调用的函数=].我假设您有一个 init 文件,如果没有,您可以轻松找到相关信息。无论你将 ess 的配置保存在你的 init 文件中的什么地方,你都可以添加(尽管这是默认设置,所以除非你设置 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))
使用
启动 emacs
emacs -Q -l /path/to/this/init.el
打开一个 R 文件,启动劣质 R 进程,然后输入 library(ti
M-C-/ 你应该得到包完成。
我正在尝试从 RStudio 迁移到 emacs ess 我现在正在尝试在 emacs ess 中找到自动完成功能 类似于 Rstudio
对于我的问题,我将使用一个简单的 RStudio 示例 如果你能告诉我如何做同样的事情,我将不胜感激 emacs ess(目的当然是泛化):
在 RStudio
when i type the text
libr
and then press TAB I getlibrary()
括号内
when i type "tidyv" like that:
library(tidyv)
and then TAB i getlibrary(tidyverse)
你能用简单的步骤描述一下我如何在 emacs ess 中做同样的事情吗?
谢谢
拉斐尔
好的,所以我让它为我工作,通过以下设置和步骤非常好:
- Windows 10 x64
- R 3.4.3 x64
- Emacs 25 x64 安装正常
- MELPA 存储库已在
init.el
中启用
package-install [RET] company
package-install [RET] ess
- 在某个目录中打开一个新的 R 文件
M-x company-mode
在当前缓冲区中启用company-mode
- `C-c C-z' 启动劣质 R 进程(没有这个将无法工作)
此时,autocomplete会自动弹出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)
在最近的 backend addition 之后,这应该适用于默认值 company-backend。您只需要从 melpa 更新您的 ESS。如果 company-R-library
不是 ESS 缓冲区中 company-backends
的一部分,只需将其添加到 ESS 模式挂钩中即可。请注意,您应该设置 ess-use-company
.
针对评论,ess-use-company
是您应该在配置中设置为 t
的变量,而不是使用 M-x[=44 调用的函数=].我假设您有一个 init 文件,如果没有,您可以轻松找到相关信息。无论你将 ess 的配置保存在你的 init 文件中的什么地方,你都可以添加(尽管这是默认设置,所以除非你设置 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-/ 你应该得到包完成。