Emacs ESS缩进和自动完成

安东尼奥

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

ess-tab-complete-in-script 首先缩进行,如果没有缩进,则自动补全单词。

“功能强大,责任重大”,因此,当快速缩进代码时,您可能最终完成代码而没有注意到灾难性的结果。因此,您可以使用变量优化内容ess-first-tab-never-complete例如:if 'unless-eolTAB仅在光标位于行尾时才完成;如果是'symbol,它也会在一行的中间完成,但是如果您在一个单词的中间则不会完成;等等(有关更多信息,请阅读doc F1vess-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模式并重置选项卡绑定。

您知道哪种方法可以执行此操作吗?

有两种合理的方法可以为特定模式设置Tab键(或任何键)。通过模式挂钩在本地设置密钥,您在答案中提到的第一个。但是请注意,通常最好使用命名函数而不是a,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)

两种方法都相当常用,尽管我更喜欢后者,因为它使我更干净,更高效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章