我喜欢使用 tab 在分割窗口之间跳转,所以我map <tab> <C-W><C-W>
在 .vimrc 中这样做了。但我注意到这使得 Ctrl+I 不再表现为 Ctrl+I,而是表现为 Ctrl+W、Ctrl+W。我怎样才能重新映射<tab>
而不是<C-i>
?
答案1
由于键盘输入的内部处理方式,遗憾的是,即使在 GVIM 中,这在今天也普遍无法实现。某些组合键(如Ctrl+ 非字母)无法映射,并且无法区分Ctrl+ 字母和Ctrl+ Shift+ 字母。(除非您的终端发送不同的术语表代码,大多数人没有。)在插入或命令行模式下,尝试输入组合键。如果没有任何反应 / 插入,则无法使用该组合键。这也适用于<Tab>
/ <C-I>
、<CR>
/ <C-M>
/ <Esc>
/<C-[>
等。(唯一的例外是<BS>
/ <C-H>
。)这是一个已知的痛点,也是 vim_dev 和 #vim IRC 频道上各种讨论的主题。
有些人(首先是 Paul LeoNerd Evans)想要修复这个问题(即使对于支持该功能的终端中的控制台 Vim),并提出了各种建议,cp。http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
但截至今天,还没有任何补丁或志愿者提出,尽管许多人表示希望在未来的 Vim 8 主要版本中拥有这一点。
答案2
虽然重新映射<tab>
总是会导致<c-i>
也被重新映射,但您可以先将其重新映射<c-i>
到其他内容以nnoremap
保留其功能。由于 的助记词<c-o>
是“较旧”,因此我使用 的<c-n>
助记词“较新”:
" First remap <tab> (and <c-i>) to <c-n>
nnoremap <c-n> <tab>
" Now remap <tab> to something else
nnoremap <tab> <c-w><c-w>
答案3
并非所有快捷方式在 Vim 中都适用,尤其是在终端下。我不建议为此使用 tab 快捷方式。但另一种解决方案可能是:
" Note: Allows faster switching between windows with "Ctrl+w"! By Questor
nnoremap <silent> <C-w> <C-w><C-w>
inoremap <silent> <C-w> <Esc><C-w><C-w>
vnoremap <silent> <C-w> <Esc><C-w><C-w>
参见使用示例https://github.com/eduardolucioac/groovim/blob/master/.vimrc
[]的
答案4
如果您使用 iTerm,您可以重新映射<Ctrl+i>
到任意组合键,然后在重新映射到其他内容<tab>
之前对其进行映射。<tab>
这是我用于导航选项卡的内容<tab>
(在 iTerm 中重新映射<Ctrl+i>
到之后==
):
nnoremap == <tab>
nnoremap <tab> :tabnext<CR>