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字符)发送到应用程序,因此在ttyC-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。请参阅。感谢您提供的信息!我会用可分辨的方式去做。