56

ess-mode是“Emacs 会说统计数据”。此模式对于编辑 R 或 Splus(两个独立的统计数据包)的程序很有用。

在我的缓冲区中,每当我输入_字符时,都会被替换为<-,这非常令人沮丧。是否有一个 emacs lisp 语句来关闭这种行为?

emacs:22.1.1 ess-mode 版本(未知)

4

6 回答 6

65

ESS 的手册中(查看“5.2.0 中的更改/新功能”):

ESS[S]:按下下划线(“_”)一次插入“<-”(和以前一样);按两次下划线会插入文字下划线。要停止这种智能行为,请在加载 ess-site 后将“(ess-toggle-underscore nil)”添加到您的 .emacs

于 2010-03-28T00:07:07.137 回答
5

由于该功能很有用。您可以将其分配给您在 R 中较少使用的其他键,它将自动从下划线中取消分配。";"我个人通过在 .emacs 文件中添加以下行来分配它。

(setq ess-smart-S-assign-key ";")

我的 emacs 版本是 Vincent Goulet 的 24.3 All-in-one 安装文件。(安装在 windows 7 上)

希望这可以帮助

编辑 在上面的 emacs 25.2 中不起作用,而是在 .emacs 文件中添加以下内容

(setq ess-smart-S-assign-key ";")
(ess-toggle-S-assign nil)
(ess-toggle-S-assign nil)
于 2015-03-29T08:56:33.703 回答
3

来自http://www.r-bloggers.com/a-small-customization-of-ess/How to change smart assignment key ("_" to "<-") binding in ESS

要将“:”分配给“<-”并停止将下划线(下划线)“_”分配给“<-”,请将以下内容放入.emacs(是的,重复的行是正确的)

(setq ess-smart-S-assign-key ":")
(ess-toggle-S-assign nil)
(ess-toggle-S-assign nil)
(ess-toggle-underscore nil) ; leave underscore key alone!
于 2014-12-12T15:12:29.500 回答
3

一个似乎对我有用的更新版本,并且不那么冗长(您基本上保持正常的下划线,但可以为这种智能行为设置自己的键!):

(global-set-key (kbd "C-;")  (lambda () (interactive) (insert " <- ")))
(ess-toggle-underscore nil)

插入您的快捷键选择而不是C-;.

于 2017-05-21T20:46:08.033 回答
2

像 Michał Marczyk 和这个 R 邮件列表线程建议的那样,将此行添加到~/.emacs

(ess-toggle-underscore nil)

然后重新加载它M-x load-file并输入~/.emacs.

但是,如果您再次加载该文件,例如,如果您添加另一个自定义项,那么它会将其切换回原始状态。所以切换它两次,第一次强制它为默认值:

(ess-toggle-underscore t)
(ess-toggle-underscore nil)

~/.emacs话虽如此,我更喜欢 Drummermean 的解决方案,但如果您将其添加并加载两次,它也会恢复为默认值。所以在之前强制切换到默认值:

(ess-toggle-underscore t)
(global-set-key (kbd "M--")  (lambda () (interactive) (insert " <- ")))
(ess-toggle-underscore nil)

我将智能分配绑定到Opt-[minus]喜欢RStudio(在 Mac 上)。

于 2018-04-25T16:18:46.217 回答
0

作为@mmorin 回答的后续行动。要以与 Rstudio 中相同的方式为赋值运算符设置键绑定,请在.emacs文件中添加以下内容

(ess-toggle-underscore t)
(ess-toggle-underscore nil)
(define-key ess-mode-map (kbd "M--") (lambda () (interactive) (just-one-space 1) (insert "<-") (just-one-space 1)))
(define-key inferior-ess-mode-map (kbd "M--") (lambda () (interactive) (just-one-space 1) (insert "<-") (just-one-space 1)))

于 2019-07-30T09:56:46.700 回答