在vim中,如何在不重新映射<Ctrl + i>的情况下重新映射<tab>?


14

我喜欢使用tab在分割窗口之间跳转,所以我map <tab> <C-W><C-W>在.vimrc中。然而我注意到这使得Ctrl + I不再表现为Ctrl + I,而是按Ctrl + W,Ctrl + W。我怎样才能重新映射<tab>但不是<C-i>

Answers:


10

由于键盘输入在内部处理的方式,遗憾的是今天通常不可能,即使在GVIM中也是如此。某些键组合(如Ctrl+非字母)无法映射,Ctrl+字母与Ctrl+ Shift+字母无法区分。(除非您的终端为其发送不同的termcap代码,但大多数情况下都没有。)在插入或命令行模式下,尝试键入组合键。如果没有任何反应/插入,则无法使用该组合键。这也适用于<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主要版本中使用它。


1
如果这个键码映射/识别问题已经在Vim 8中得到解决,截至目前(2017年)?我发现我仍然可以在我的Vim 8.0上重现Jon的例子
llinfeng

@llinfeng:不,不幸的是没有。Bram目前正致力于将终端集成到Vim中; 这似乎使用了Paul Evans制作的库,所以也许这最终会导致处理键的改进。(但这次是纯粹的猜测。)
Ingo Karkat,

0

并非所有快捷方式都可以在Vim中使用,特别是如果它位于终端下。我不建议为此目的使用制表符快捷方式。但另一种解决方案可能如下:

" 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中的使用示例

[]的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.