GNU Emacs 24.1:强制TAB键在ESS模式下插入<tab>字符</tab>

时间:2014-05-19 22:13:17

标签: emacs ess

除了插入<tab>\t)字符外,我几乎从不使用 TAB 键。继续输入 C-q TAB 来执行此操作是不可接受的,因为我主要使用制表符进行注释。我的大部分代码缩进都是由Emacs自动匹配我的第一行手动缩进,并将indent-region绑定到 C-TAB 来完成的。我主要使用tab键来缩进我的评论。我更喜欢将标签宽度设置为8个字符,并将每个评论缩进两个标签字符,总共16个字符的空格。如果ESS不像here所描述的那样容易出现故障,我可以使用现有的压缩管理系统。我目前正在处理的文件有断线,这导致了所描述的问题。目前,在该文件中,按tab键不会产生任何结果。

如何强制Tab键在ESS [S]和ESS [SAS]模式下插入制表符?

我尝试过添加

(global-set-key "\C-i" 'self-insert-command)

(setq-default tab-always-indent nil)

到我的.emacs文件,但这并没有改变ESS中的行为。我无法弄清楚Emacs在内部称之为ESS [S]模式,即

(define-key ess-mode-map "\C-i" 'self-insert-command)

产生错误

  

&#34;变量ess-mode-map无效。&#34;

我尝试了ess-S-modeess-s-modeESS-S-mode和其他一些具有相同结果的人。

我还确认ess-mode-hookess-mode-map是预期的钩子和地图变量。然后我尝试了

(add-hook 'ess-mode-hook (lambda () (define-key "\t" ess-mode-map 'self-insert-command)))

哪个不起作用。

我尝试编辑ess-mode.el文件并更改&#34; \ t&#34;的键盘映射。到'self-insert-command没有产生影响。

4 个答案:

答案 0 :(得分:1)

在加载定义模式的代码之前未定义map变量,或者甚至在启用模式之前也未定义。

  • 如果是第一个,那么在尝试绑定密钥之前require库。或者使用eval-after-load

  • 如果是第二个,则将绑定放在模式钩子上:

    (add-hook 'THE-MODE-HOOK (lambda () (define-key "\t" THE-MODE-MAP 'self-insert-command)))
    

您可能需要查看源代码以了解THE-MODE-HOOKTHE-MODE-MAP是什么。或者您可以从C-h f THE-MODE获得所需内容,其中THE-MODE是模式名称。

答案 1 :(得分:0)

我不太了解你的问题,但这是两个备选方案:

  1. 在本地重新绑定密钥:

    (define-key ess-mode-map "\C-i" 'self-insert-command)
    
  2. 更改ess选项卡的行为,这将使 TAB 仅在行的开头缩进,否则它将始终插入普通tab

    (setq ess-tab-always-indent nil)
    

答案 2 :(得分:0)

M-i绑定到Emacs中的tab-to-tab-stop,它会不断添加8个空格,但我确信可自定义。在Indentation Commands,还有更多可能对您有所帮助的命令。

答案 3 :(得分:0)

实用的解决方案很简单,只需添加:

(add-hook 'ess-mode-hook (lambda () (local-set-key "\t" 'self-insert-command)))

.emacs文件。