【发布时间】:2014-07-08 00:30:42
【问题描述】:
除了插入<tab> (\t) 字符外,我几乎从不使用 TAB 键。继续键入 C-q TAB 来执行此操作是不可接受的,因为我主要使用 cmets 的选项卡。我的大部分代码缩进是通过 Emacs 自动匹配我的第一行手动缩进,并通过将indent-region 绑定到 C-TAB 来完成的。我主要使用 tab 键来缩进我的 cmets。我更喜欢将制表符宽度设置为 8 个字符,并将每个 cmets 缩进两个制表符字符,总共 16 个空格字符。如果 ESS 不像here 所述那样容易出现故障,我可以使用现有的缩进管理系统。我目前正在处理的文件有断行,这正是所描述的问题。目前,在该文件中,按tab 键会产生 NO 结果。
在 ESS[S] 和 ESS[SAS] 模式下如何强制 tab 键插入 tab 字符?
我已经尝试添加
(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)
产生错误
“变量 ess-mode-map 无效。”
我尝试了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 文件并将 "\t" 的键盘映射更改为 'self-insert-command,但没有任何效果。
【问题讨论】:
-
应该作为stackoverflow.com/q/18970809/729907的副本关闭。
-
我争辩说,问题不在于 Emacs 插入空格而不是制表符,而是 EMACS 在 ESS 模式下按 TAB 时从不插入
(\t) 字符。我想更改默认设置。 -
哦,好的。在这种情况下,只需在模式映射中将
"\t"绑定到self-insert-command。 -
我一直在尝试这样做,但我不知道什么叫 ess-mode。
(global-set-key "\t" 'self-insert-command)不起作用,(define-key ess-mode-map "\t" 'self-insert-command)失败并出现错误:“符号作为变量的值是无效的:ess-mode-map”