GNU Emacs 24.1:强制TAB键插入a<;选项卡>;ESS模式下的字符

GNU Emacs 24.1:强制TAB键插入a<;选项卡>;ESS模式下的字符,emacs,ess,Emacs,Ess,除了插入(\t)字符外,我几乎从不使用TAB键。继续键入C-qtab来执行此操作是不可接受的,因为我主要使用tabs来进行注释。我的大部分代码缩进是通过Emacs自动匹配我的第一行手动缩进,并通过将缩进区域绑定到C-TAB来完成的。我主要使用tab键缩进我的评论。我更喜欢将制表符宽度设置为8个字符,并将每个注释缩进两个制表符,总共16个字符的空白。如果ESS不象前面所描述的那样容易失败,我可以使用现有的压痕管理系统。我目前正在处理的文件中有断线,这正好导致了所描述的问题。目前,在该文件中,按选项

除了插入
\t
)字符外,我几乎从不使用TAB键。继续键入C-qtab来执行此操作是不可接受的,因为我主要使用tabs来进行注释。我的大部分代码缩进是通过Emacs自动匹配我的第一行手动缩进,并通过将
缩进区域
绑定到C-TAB来完成的。我主要使用tab键缩进我的评论。我更喜欢将制表符宽度设置为8个字符,并将每个注释缩进两个制表符,总共16个字符的空白。如果ESS不象前面所描述的那样容易失败,我可以使用现有的压痕管理系统。我目前正在处理的文件中有断线,这正好导致了所描述的问题。目前,在该文件中,按
选项卡
键不会产生任何结果

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

我试着添加

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

到我的
.emacs
文件,但这并没有改变ESS中的行为。我无法理解Emacs在内部将ESS[S]模式称为什么,即

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

“变量ess模式映射无效。”

我尝试了
ess-S-mode
ess-S-mode
ess-S-mode
,还有一些其他方法,结果都是一样的

我还确认
ess mode hook
ess mode map
是预期的hook和map变量。然后我试着

(add-hook 'ess-mode-hook (lambda () (define-key "\t" ess-mode-map 'self-insert-command)))
这是行不通的


我尝试编辑ess-mode.el文件,并将“\t”的键映射更改为
的self-insert-command
,但没有产生任何效果

我不太理解您的问题,但以下是两个备选方案:

  • 在本地重新绑定密钥:

    (define-key ess-mode-map "\C-i" 'self-insert-command)
    
  • 更改ess制表符的行为,这将使制表符仅在行首缩进,否则它将始终插入普通的
    制表符

    (setq ess-tab-always-indent nil)
    

  • 听起来好像在加载定义模式的代码之前,或者甚至在启用模式之前,都没有定义map变量

    • 如果是第一个,则在尝试绑定密钥之前,
      需要
      库。或者在加载后使用
      eval

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

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

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

    M-i
    绑定到Emacs中的
    制表位到制表位
    ,这会连续添加8个空格,但我确信这是可定制的。没有更多的命令可以帮助您。

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

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

    .emacs
    文件。

    的可能副本应作为副本关闭。我认为,问题不是emacs插入空格而不是制表符,而是emacs在ESS模式下按制表符时从不插入(\t)字符。我想更改默认值。哦,好的。在这种情况下,只需将
    “\t”
    绑定到模式映射中的
    self-insert命令即可。我一直在尝试这样做,但我不知道ess模式的名称
    (全局设置键“\t”'自插入命令)
    不起作用,
    (定义键ess模式映射“\t”'自插入命令)
    失败并出现错误:“符号作为变量的值无效:ess模式映射”在我的问题中,您会注意到我尝试了您的第一个建议,它确实导致了一个错误,因为“ess”不引用ESS模式。然后找出当前的密钥映射是什么,并将其绑定。@user2127595,首先加载ESS,然后绑定密钥,或者按照建议使用ESS模式挂钩。嗯,
    M-x本地设置密钥C-M选项卡自插入命令
    。但是我的问题中列出的模式挂钩没有。如何告诉emacs在加载ESS时绑定此键?哇,我真是个傻瓜…
    (添加hook'ESS模式hook(lambda()(本地设置键“\t”'self insert命令))
    工作得很好。谢谢我不知道图书馆叫什么。这不是“ess图书馆”。“ess”似乎也不是指模式。我想说的是,要么等待使用ess的人的消息,要么看看ess手册。。。或者,如果您有源代码,您大概可以查找它(例如,
    define key
    global set key
    map
    等等)。如果没有,希望有人能为您提供完整的答案。我正在慢慢地阅读ess模式手册及其一些.el文件,感谢您的建议。似乎map变量是
    ess mode map
    (add-hook 'ess-mode-hook (lambda () (local-set-key "\t" 'self-insert-command)))