Emacs中C-i和tab的关系是什么?

Emacs中C-i和tab的关系是什么?,emacs,Emacs,当我将函数绑定到C-I时。似乎选项卡已绑定到该函数。 为什么会这样?是否在Emacs中识别出相同的键?它们恰好在默认设置中链接, 但不一定要这样: (keyboard-translate ?\C-i ?\C-j) 现在C-i将换行,而tab仍将缩进。在文本终端上点击tab将C-i代码(即名为tab的ascii字符)发送到应用程序,因此在ttyC-i下,和tab通常无法区分。 默认情况下,当选项卡没有绑定时,Emacs通过将选项卡事件映射到C-i(这在功能键映射中完成),从而在GUI环境中保持这

当我将函数绑定到
C-I
时。似乎
选项卡
已绑定到该函数。
为什么会这样?是否在Emacs中识别出相同的键?

它们恰好在默认设置中链接, 但不一定要这样:

(keyboard-translate ?\C-i ?\C-j)

现在
C-i
将换行,而
tab
仍将缩进。

在文本终端上点击tab将
C-i
代码(即名为tab的ascii字符)发送到应用程序,因此在tty
C-i
下,和tab通常无法区分。
默认情况下,当
选项卡
没有绑定时,Emacs通过将
选项卡
事件映射到
C-i
(这在
功能键映射
中完成),从而在GUI环境中保持这种等价性。因此,大多数软件包都应该将其命令绑定到TAB char(即
C-i
)而不是
TAB
事件,以便它在tty或GUI下同样有效。但是,如果您想区分这两种情况,很容易:只需将您想要的命令绑定到
tab
事件,就不会再发生从
tab
C-i
的映射。

这是
tab
的转义代码。即,在较旧的终端中,并不总是有制表键,因此为了键入制表符,使用了
control
I
的组合。类似地,
C-m
相当于
enter
——似乎有点浪费键绑定,但这就是它的工作原理。有趣的是,为什么他们要将
C-i
转换为
TAB
,而不是将
C-i
绑定到
indent line
函数?我认为这是因为在bash中C-i和TAB是相同的,并且它们可以保持一致性。历史原因。在普通终端中,TAB键发送的键代码与Ctrl-i相同。谢谢大家!我决定使用键盘翻译和超键,如
(键盘翻译?\C-I?\H-I)
。上面评论中所说的是正确的,但不完整。它不仅仅是关于
bash
或普通终端。事实上,ASCII控制字符“TAB”(又名“水平TAB”,又名“HT”)与
C-i
相同,即控制i。请参阅。感谢您提供的信息!我会用可分辨的方式去做。