Mapping <C-F>
( Ctrl+letter) es siempre lo mismo que mapping <C-f>
( Ctrl+Shift+letter). No puedes mapear uno sin el otro.
La raíz del problema es que Vim lee caracteres del terminal, que envía ^F
(código ASCII 0x06
) para ambos Ctrl+fy Ctrl+Shift+f; Vim no tiene forma de saber si presionó la tecla Shift. Esta publicación proporciona más información sobre terminales y caracteres de control .
En teoría, esto podría hacerse con gVim, ya que la mayoría (¿o todos?) Los entornos gráficos envían eventos clave mucho más detallados. Pero, por desgracia, gVim opera muy parecido a un emulador de terminal, y no puede distinguir entre <C-f>
y <C-F>
sea (esto fue tal vez una decisión de diseño para la compatibilidad Vim-gVim).
Soluciones posibles:
Puede configurar su emulador de terminal para enviar un código diferente a Vim cuando presiona Ctrl+Shift+f. Por ejemplo, para xterm podrías hacer:
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~")
Esto enviará el código para <C-S-F12>
y <C-S-F11>
para Vim, que puede recoger con:
nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
Tenga en cuenta que puede asignar Alt+Shift+letter, ya que el terminal envía un código diferente para aquellos: <Esc>f
( 0x1b0x66
) o <Esc>F
( 0x1b0x46
).
NeoVim, por lo que puedo encontrar, no ha solucionado este problema, excepto en algunos casos como Ctrl+Shift+Entery Ctrl+Shift+Tab, pero es posible que esta característica se agregue en el futuro.