除了插入<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-mode
,ess-s-mode
,ESS-S-mode
和其他一些具有相同结果的人。
我还确认ess-mode-hook
和ess-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
没有产生影响。
答案 0 :(得分:1)
在加载定义模式的代码之前未定义map变量,或者甚至在启用模式之前也未定义。
如果是第一个,那么在尝试绑定密钥之前require
库。或者使用eval-after-load
。
如果是第二个,则将绑定放在模式钩子上:
(add-hook 'THE-MODE-HOOK (lambda () (define-key "\t" THE-MODE-MAP 'self-insert-command)))
您可能需要查看源代码以了解THE-MODE-HOOK
和THE-MODE-MAP
是什么。或者您可以从C-h f THE-MODE
获得所需内容,其中THE-MODE
是模式名称。
答案 1 :(得分:0)
我不太了解你的问题,但这是两个备选方案:
在本地重新绑定密钥:
(define-key ess-mode-map "\C-i" 'self-insert-command)
更改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
文件。