【问题标题】:How to stop emacs from replacing underbar with <- in ess-mode如何阻止emacs在ess-mode中用<-替换下划线
【发布时间】:2011-02-01 15:33:25
【问题描述】:

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

在我的缓冲区中,每当我输入_ 时,字符都会被&lt;- 替换,这非常令人沮丧。是否有 emacs lisp 语句可以关闭此行为?

emacs:22.1.1 ess-mode 发布(未知)

【问题讨论】:

标签: r emacs ess


【解决方案1】:

作为@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)))

【讨论】:

    【解决方案2】:

    像 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 上)。

    【讨论】:

      【解决方案3】:

      因为这个功能很有用。您可以将其分配给您在 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)
      

      【讨论】:

      • 这停止了下划线替换的问题,但是当我按下“;”它不会发出“
      • 它在我的 Windows 7 上的 emacs 版本中生成 &lt;-。你有什么不同吗?
      • 多年来,significant ... discussion ... 产生了 commit ed048d3,名称更改和一些新的默认行为。大多数*-smart-* vars/fun 已被弃用/删除,现在有ess-insert-S-assign 和可选的ess-cycle-assignment
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        要将“:”分配给“

        (setq ess-smart-S-assign-key ":")
        (ess-toggle-S-assign nil)
        (ess-toggle-S-assign nil)
        (ess-toggle-underscore nil) ; leave underscore key alone!
        

        【讨论】:

        • 解释为什么需要重复行会很有帮助。
        【解决方案6】:

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

        ESS[S]:按下下划线(“_”)一次插入“

        【讨论】:

        • 为了明确起见,(require 'ess-site) 应该在 .emacs 或 .emacs.d/init.el 中位于 (ess-toggle-underscore nil) 之前。
        猜你喜欢
        • 2012-10-05
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 2012-01-13
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        相关资源
        最近更新 更多