:nmap <silent> <C-F> :wincmd f<CR>
问题是这会重新映射
^f
(小写) f
)映射,即向下翻页。有什么方法可以只重映射^F
(大写F
)并保留^f
不变吗?#1 楼
映射<C-F>
(Ctrl+letter
)始终与映射<C-f>
(Ctrl+Shift+letter
)相同。 问题的根源在于Vim从终端读取字符,终端同时为
^F
和0x06
发送Ctrl+f
(ASCII码Ctrl+Shift+f
); Vim无法知道您是否按了Shift键。该站点提供了有关终端和控制字符的更多信息。理论上,可以使用gVim完成此操作,因为大多数(或所有?)图形环境都发送更详细的按键事件。但是不幸的是,gVim的运行方式与终端仿真器非常相似,并且无法区分
<C-f>
和<C-F>
(这可能是Vim-gVim兼容性的设计决定)。可能的解决方案:
您可以配置终端仿真器,以便在按
Ctrl+Shift+f
时将不同的代码发送到Vim。例如,对于xterm,您可以执行以下操作:XTerm*VT100.translations: #override \n\
Ctrl ~Meta Shift <Key>f: string(0x1b) string("[24;6~")\n\
Ctrl ~Meta Shift <Key>r: string(0x1b) string("[23;6~")
这会将
<C-S-F12>
和<C-S-F11>
的代码发送到Vim,您可以通过以下代码获取代码:nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
请注意,您可以映射
Alt+Shift+letter
,因为终端发送的代码与此不同:<Esc>f
(0x1b0x66
)或<Esc>F
(0x1b0x46
)。NeoVim据我所知可以找到但没有解决此问题,除了少数情况,例如
Ctrl+Shift+Enter
和Ctrl+Shift+Tab
,但将来可能会添加此功能。评论
请注意,Vim的最新版本通过使用ModifyOtherKeys功能将其与最新的实际xterm结合使用。另请参阅:h ModifyOtherKeys和vimhelp.org/vim_faq.txt.html#faq-20.5
–克里斯蒂安·布拉班特(Christian Brabandt)
20-09-23在8:07
评论
如果使用xterm或iterm以及最近的Vim,则可以。有关更多信息,请参见此答案。