Answers:
映射<C-F>
(Ctrl+letter)始终与映射<C-f>
(Ctrl+Shift+letter)相同。没有另一个,您就无法映射。
问题的根源是Vim从终端读取字符,该终端为和发送^F
(ASCII码0x06
)。Vim无法知道您是否按了Shift键。这篇文章提供了有关终端和控制字符的更多信息。Ctrl+fCtrl+Shift+f
从理论上讲,这可以使用gVim来完成,因为大多数(或所有?)图形环境都会发送更为详细的关键事件。但不幸的是,gVim的工作就像一个终端模拟器,并且不能区分<C-f>
,并<C-F>
任(这也许是对的Vim-gVim的兼容性设计决定)。
可能的解决方案:
您可以将终端仿真器配置为在按时向Vim发送不同的代码Ctrl+Shift+f。例如,对于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,但它可能是这个功能将在未来增加。