【问题标题】:ESS: ess-request-a-process defaults to "S"ESS:ess-request-a-process 默认为“S”
【发布时间】:2011-05-22 01:36:13
【问题描述】:

我经常发现自己在 ESS 缓冲区中运行着一堆 R 进程。有一个方便的 Lisp 函数 ess-request-a-process 请求 R 进程,并将其放在前面。唯一的缺点是它默认为 S,所以每次我要进行切换时,我都必须输入 R,令人作呕。

我尝试自定义 ess-language 变量,但即使我将值设置为“R”,即当前会话的 4,或者即使我为未来会话保存设置,只要我键入 C-c C-k,就会自动S 再次出现。这很烦人,我真的不想以C-x C-b 结束,然后以C-s 结束所需的 R 会话! =)

我什至尝试在.emacs 中设置(setq-default ess-language "R"),但没有成功...

顺便说一句,我在 Linux Mint 上运行 Emacs v. 23.1.1,在 Arch Linux 上运行 Emacs v. 23.2,以及 ESS v. 5.12。如果这是相关的,我会使用 -nw 参数从终端运行 Emacs。这是我的.emacs:

;; start server
(server-start)

;; load ESS
(require 'ess-site)
(require 'ess-rutils)

;; set HTML help as default
(setq inferior-ess-r-help-command "help(\"%s\", help_type = \"html\")\n")

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(ess-help-kill-bogus-buffers t)
 '(ess-rutils-keys nil)
 '(show-paren-mode t))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
(put 'upcase-region 'disabled nil)

那么...如何一劳永逸地设置R? (我不使用 S/S+/SAS)

【问题讨论】:

    标签: r emacs customization ess


    【解决方案1】:

    目前我还不知道这个功能。 C-c C-k 绑定到 ESS 缓冲区中的ess-force-buffer-current。

    [edit: 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)
    

    ]

    【讨论】:

    • 我似乎找不到 ess-dialect 变量。 C-c C-v 保留用于 R 函数帮助,而 C-c C-s 保留用于 ess-execute-search。我觉得我在这里做错了什么......
    • @aL3xa,对不起,变量帮助当然是C-h v ess-dialect,现在更正。C-c C-s 绑定到 iESS 缓冲区而不是 ESS 缓冲区中的 ess-execute-search。在进程缓冲区中切换进程有什么意义? :)
    • 嗯...我想做无意义的开关! =) 现在,是否可以只设置 R 而不是 S?
    • @aL3xa,我现在明白了,术语有些混乱。进程的切换,意味着改变当前缓冲区的子进程关联。这就是 ess-switch-process 所做的。并且您不能更改进程运行所在的缓冲区的关联子进程(劣质 ESS)。您可能的意思是切换到另一个进程缓冲区(即跳转)。但完全不同的功能,例如 C-c C-z。
    • 设置 ess-dialect 应该可以。所有内部函数都使用它作为默认名称来启动或切换到进程。不适合你?
    猜你喜欢
    • 2018-05-07
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2022-02-10
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多