在使用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模式和重置选项卡绑定。
您知道执行此操作的规范方法是哪种吗?
答案 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)
这两种方式都很常用,虽然我自己偏爱后者,因为它让我感觉更清洁,更有效率。