我经常发现自己在ESS缓冲区中运行大量R进程。有一个方便的Lisp函数ess-request-a-process
,它要求R进程,并把它带到前面。唯一的缺点是它以某种方式默认为 S ,因此每次我要进行切换时,我都必须输入 R ,这是令人作呕的。
我尝试自定义ess-language
变量,但即使我将值设置为“R”,即当前会话为4,或者即使我为将来的会话保存设置,只要我输入{{1} },自动 S 再次出现。这非常烦人,我真的不希望最终得到C-c C-k
然后C-x C-b
来获得所需的R会话! =)
我甚至尝试在C-s
中设置(setq-default ess-language "R")
,但没有运气......
BTW,我在Linux Mint上运行Emacs v.23.1.1,在Arch Linux上运行Emacs v.23.2,ESS v.5.12。如果这是相关的,我使用.emacs
参数从终端运行Emacs。这是我的-nw
:
.emacs
那么......如何一劳永逸地设置 R ? (我不使用S / S + / SAS)
答案 0 :(得分:3)
到目前为止我还不知道这个功能。 C-c C-k 与ESS缓冲区中的ess-force-buffer-current
绑定。
[编辑: C-c C-k 确实绑定到iESS中的ess-request-a-process,在ESS中它是ess-force-buffer-current
]
在任何情况下,您必须自定义的变量为ess-dialect
(setq-default ess-dialect "R")
它是缓冲区局部变量,而ess-mode-hook
中的其他一些东西可能会将它设置为不同的值。
使用 C-h v ess-dialect
此外,如果您已经运行了多个进程,那么ess-switch-process
( C-c C-s )可能是正确的方法。
[编辑:它不会跳转到进程,只是重置当前ESS缓冲区的关联进程]
[编辑:在深入研究该问题后,发现ess-request-a-process
使用ess-language
变量ess-dialect
似乎更合适。问题是,每次ess-inferior过程开始时,它都会重置ess-language
的全局值。这就是为什么在你的情况下设置它不起作用。
这是一个快速修复:
(defun ess-set-language ()
(setq-default ess-language "R")
(setq ess-language "R")
)
(add-hook 'ess-post-run-hook 'ess-set-language t)