![正常模式下 Ctrl-I 与 TAB 冲突](https://linux22.com/image/166301/%E6%AD%A3%E5%B8%B8%E6%A8%A1%E5%BC%8F%E4%B8%8B%20Ctrl-I%20%E4%B8%8E%20TAB%20%E5%86%B2%E7%AA%81.png)
我最近注意到,在正常模式下,当我输入时Ctrl-i(命令为跳跃)它是“困惑”的标签钥匙。特别是,我有这个映射:
nnoremap <Tab> :tabnext<Enter>
答案1
终端 I/O 应用程序只能看到终端发送的组合字符, 和无法区分特定的调和弦,而 GUI 应用程序可以,因为 GUI 往往根据按键和释放消息进行操作。
当按下⇥ Tab或⎈ Control+键时,大多数终端和大多数终端仿真器都会通过(虚拟)线路将 ␉ (U+0009) 字符发送到主机系统。I这不是vim
。这就是终端的工作方式,以及模拟它们的模拟器的工作方式。
同样,现在我经常忘记,当按下⎋ Esc或⎈ Control+时,这些终端和终端仿真器会通过(虚拟)线路将 ␛ (U+001B) 字符发送到主机系统。[
答案2
由于键盘输入的内部处理方式,不幸的是,这在今天通常是不可能的。某些组合键,例如Ctrl+ 非字母组合无法映射,并且无法区分Ctrl+ 字母与Ctrl+ + 字母。 Shift(除非你的终端发送一个不同的术语帽代码,但大多数都没有。)在插入或命令行模式下,尝试键入组合键。如果没有发生/插入,则无法使用该组合键。这也适用于<Tab>
/ <C-I>
、<CR>
/ <C-M>
/ <Esc>
/<C-[>
等(唯一例外是<BS>
/ <C-H>
。)这是一个已知的痛点,也是 vim_dev 和 #vim IRC 频道上各种讨论的主题。
有些人(首先是 Paul LeoNerd Evans)想要解决这个问题(即使是支持此功能的终端中的控制台 Vim),并提出了各种建议,cp。https://groups.google.com/forum/#!topic/vim_dev/Ym6D-kWIsyo
但截至今天,还没有补丁或志愿者出现,尽管许多人表示希望在未来的 Vim 版本中提供此功能。