我没有使用autoyas,因为我发现自动完成集成是一种更好的方法.
插入先前定义的符号是一种称为"dabbrev-expand"的一般emacs功能,并且是绑定的M-/.我在.emacs中有这个,以完整符号完成:
(setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_\\|s.")
(setq dabbrev-case-fold-search t)
Run Code Online (Sandbox Code Playgroud)
我广泛使用的另一件事是基于imenu的跳转到符号定义.它提供与emacs标签类似的功能,但仅适用于与当前缓冲区处于相同模式的开放缓冲区.它还使用IDO进行查询:

放入imenu-anywhere.elemacs加载路径并添加:
(require 'imenu-anywhere)
(global-set-key [?\M-o] 'imenu-anywhere)
Run Code Online (Sandbox Code Playgroud)
现在,如果我做 M-ofoo RETemacs跳转到'foo'的函数/ class/method/generic定义,只要在其中一个开放缓冲区中定义'foo'.当模式定义imenu-tags时,这当然有效.ESS定义了这些,因此您不需要添加更多内容.
还有一些R-yas模板的集合.我没有开始使用它们,但我的猜测是它是一个非常有效的模板插入机制.
[编辑]激活tracebug:
(setq ess-use-tracebug t)
Run Code Online (Sandbox Code Playgroud)