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)
制表符:
(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)))