Emacs ESS缩进和自动完成

时间:2014-06-08 12:21:36

标签: r emacs ess

在使用ESS模式时,有许多有用的变量可以控制Emacs(R)代码块中的 TAB 键缩进和完成。

ess-tab-complete-in-script首先缩进行,如果没有任何缩进,则自动填充该单词。

“功能强大,责任重大”,因此,当快速缩进代码时,最终可能会完成代码而不会注意到灾难性的结果。因此,您可以使用变量进行优化 ess-first-tab-never-complete。例如:if 'unless-eol TAB 仅在光标位于行尾时完成;如果'symbol,它也会在一行中间完成,但如果你在一个单词的中间则不会;等等(阅读doc以获取更多信息 F1 v ess-first-tab-never-complete)。

问题在于,至少对我来说, TAB 绑定到ess-noweb-indent-line,但管理缩进或完成行为的命令是:ess-indent-or-complete。所以我用修复选项卡绑定:

(add-hook 'ess-mode-hook
 '(lambda()
    (local-set-key (kbd "<tab>") 'ess-indent-or-complete)
    ))

这有效,但我想知道这是否正确。在手册中,我没有看到任何提示挂钩到ESS模式和重置选项卡绑定。

您知道执行此操作的规范方法是哪种吗?

1 个答案:

答案 0 :(得分:1)

有一些合理的方法可以为特定模式设置Tab键(或任何键)。您在答案中提到的第一个,通过模式挂钩在本地设置密钥。但请注意,通常最好使用命名函数而不是lambda,以便以后可以删除钩子,如果你想这样做:

(defun ess-keys-hook ()
  "Put a bunch of keybindings in here."
  (local-set-key [tab] 'ess-indent-or-complete))

(add-hook 'ess-mode-hook 'ess-keys-hook)

另一个选项是在相关模式映射中定义键,您可以这样做:

(define-key ess-mode-map [tab] 'ess-indent-or-complete)

这两种方式都很常用,虽然我自己偏爱后者,因为它让我感觉更清洁,更有效率。