在Vim(或终端?)中,无法区分控制字符及其插入符号,例如Enter
与C-M
。但是,只有例外; BS
与C-H
为什么他们只有特权?
例如,如果您将Enter
映射到NOP
,则还会映射C-M
。其他许多控制字符具有相同的行为。另一方面,BS
和C-H
可以分别映射到不同的密钥。
:map <Enter> <NOP> // also <C-M> will be mapped
:map <BS> <NOP> // only <BS> will be mapped, <C-H> won't
答案 0 :(得分:2)
您可以在退格前按 control V
将退格插入文件。在这种情况下,vim(和大多数编辑者)会将其显示为 ^H
。但通常将退格视为一个命令(告诉vim做某事,具体取决于模式)。
当在包含控制字符的文件中移动光标时,您可以轻松区分控制字符与另一个字符旁边的插入符:当您向左/向右移动光标时,vim将移动两个列对于控制字符,但每个插入符号和其他字符的一个列。
答案 1 :(得分:0)
我不知道所有细节,但基本上(据我所知),Vim使用API来获取无法区分这些不同键的按键。对于像GVIM这样的图形应用程序,可以毫无问题地区分所有键。它只是转换到更强大(和仅GUI)的API。对于终端,并非所有终端都可以实际区分这些密钥(<BS>
/ <C-H>
是唯一的例外)。然而,许多现代技术曾经可以再次转变为更强大的API。
有些人(最重要的是Paul LeoNerd Evans)希望解决这个问题(即使是支持Vim的终端中的控制台Vim),并提出了各种提案,cp。 http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
但截至今天,尚未有任何补丁或志愿者挺身而出,尽管许多人表示希望在未来的Vim版本中实现这一目标。
由于键盘输入在内部处理的方式,遗憾的是,现在通常无法区分某些键,即使在GVIM中也是如此。某些组合键,例如 Ctrl +非字母无法映射, Ctrl + letter vs. Ctrl + Shift +字母无法区分。 (除非您的终端为其发送不同的 termcap 代码,否则最不要这样做。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则无法使用该组合键。这也适用于<Tab>
/ <C-I>
,<CR>
/ <C-M>
/ <Esc>
/ <C-[>
等。(只有<BS>
例外/ <C-H>
。)这是一个众所周知的痛点,也是关于vim_dev和#vim IRC频道的各种讨论的主题。