我尝试在Emacs中为R获得一个实用的开发环境,希望自动完成工作,如http://www.emacswiki.org/emacs/ESSAuto-complete所示。
然而,即使在最小配置中,我也无法使其正常工作。
了解我对http://screencast.com/t/qcyVwkECX的看法。实际上,当AC 工作时(参见完成菜单出现),就像是R语言本身没有信息,而ac-source-R被添加到交流源。
你明白发生了什么吗?
最好的问候。
PS-这是我演示的最小Emacs配置文件:
;; Auto Completion
(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-20140824.1658/")
(add-to-list 'load-path "~/.emacs.d/elpa/popup-20140815.629/")
(when (require 'auto-complete-config)
(ac-config-default)
;; use `C-n/C-p' to select candidates
(setq ac-use-menu-map t)
(define-key ac-menu-map (kbd "C-n") 'ac-next)
(define-key ac-menu-map (kbd "C-p") 'ac-previous)
;; unbind some keys (inconvenient in iESS buffers)
(define-key ac-completing-map (kbd "M-n") nil)
(define-key ac-completing-map (kbd "M-p") nil)
;; set default sources
(setq ac-sources
(append '(ac-source-features
ac-source-functions
ac-source-yasnippet
ac-source-variables
ac-source-symbols)
ac-sources))
(setq ac-delay 0) ; faster than default 0.1
(setq ac-auto-show-menu 0.2)
(setq ac-quick-help-delay 0.5)
(setq ac-quick-help-height 10)
(setq ac-candidate-limit 100)
;; completion by TAB
(define-key ac-completing-map
(kbd "<tab>") 'ac-complete)
;; avoid Flyspell processes when auto completion is being started
(ac-flyspell-workaround))
;; ESS: Emacs Speaks Statistics
(add-to-list 'load-path "~/.emacs.d/elpa/ess-20140824.1452/lisp/")
(setq shell-file-name "zsh.exe")
(add-to-list 'auto-mode-alist '("\\.[rR]\\'" . R-mode))
(autoload 'R "ess-site" "Call 'R', the 'GNU S' system from the R Foundation." t)
(autoload 'R-mode "ess-site" "Major mode for editing R source." t)
(setq ess-ask-for-ess-directory nil)
(setq inferior-ess-same-window nil)
(setq ess-default-style 'DEFAULT)
(with-eval-after-load "ess-site"
;; use eldoc to report R function names
(require 'ess-eldoc)
(add-hook 'inferior-ess-mode-hook 'ess-use-eldoc))
PPS-事实上,ElDoc似乎也不起作用!
更新
我刚刚发现它几乎可以在创建iESS缓冲区时工作,而不是仅仅在自己的缓冲区中编辑R代码时。请参阅http://screencast.com/t/fKRjLmIC6K0。
什么能解释为什么iESS必须先运行才能最终运作?
但是,不起作用的是函数参数的完成(就像页面http://www.emacswiki.org/emacs/ESSAuto-complete上的cat函数一样)。
为什么这不起作用?
答案 0 :(得分:0)
使用emacs打开R文件后,如果您在emacs状态栏中描述了此模式:
(ESS[S] [none] ElDoc AS)
您可以运行此快捷方式C-c C-s
将R会话附加到ESS [S]编辑器模式。
如果您已打开一个或一些R会话,emacs将要求您选择要使用的R会话。否则,如果您尚未打开R会话,则emacs将为您打开一个新会话。
接下来,您应该在状态栏中包含此信息:
(ESS[S] [R db -] ElDoc AS)
并且完成应该有效。