如何阻止emacs用< - 在ess-mode中替换underbar

时间:2010-03-27 23:45:55

标签: r emacs ess

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

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

emacs:22.1.1 ess-mode release(未知)

6 个答案:

答案 0 :(得分:64)

来自ESS's manual(请参阅“5.2.0中的更改/新功能”):

  

ESS [S]:按下划线(“_”)一次插入“&lt; - ”(如前所述);按下划线两次插入一个文字下划线。要停止此智能行为,请在加载ess-site后将“(ess-toggle-underscore nil)”添加到.emacs

答案 1 :(得分:4)

由于该功能很有用。您可以将其分配给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)

答案 2 :(得分:3)

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

将“:”分配给“&lt; - ”并停止分配下划线(下划线)“_”到“&lt; - ”将以下内容放在.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!

答案 3 :(得分:3)

A more recent version which seemed to work for me, and is a lot less verbose (you essentially keep normal underscores, but can set your own key for this smart behaviour!):

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

Insert your shortkey choice instead of C-;.

答案 4 :(得分:0)

像MichałMarczyk和this R mailing list thread建议的那样,将此行添加到~/.emacs

(ess-toggle-underscore nil)

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

如果再次加载文件,例如如果添加另一个自定义,则将其切换回原始状态。因此,将其切换两次,第一次将其强制为默认值:

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

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

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

我将智能作业绑定到Opt-[minus],如RStudio(在Mac上)。

答案 5 :(得分: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)))