Ctrl+letter) is always the same as mapping
Ctrl+Shift+letter). You can't map one without the other.
The root of the problem is that Vim reads characters from the terminal, which sends
^F (ASCII code
0x06) for both
Ctrl+Shift+f; Vim has no way of knowing whether you pressed the Shift key. This site provides some more information about terminals and control characters.
In theory, this could be done with gVim, since most (or all?) graphic environments send much more detailed key events. But unfortunately, gVim operates much like a terminal emulator, and can't distinguish between
<C-F> either (this was perhaps a design decision for Vim-gVim compatibility).
You could configure your terminal emulator to send a different code to Vim when you press
Ctrl+Shift+f. For example, for xterm you could do:
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~")
This will send the code for
<C-S-F11> to Vim, which you can pick up with:
nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
Note that you can map
Alt+Shift+letter, since the terminal sends a different code for those:
NeoVim has, as far as I can find, not fixed this problem except for a few cases such as
Ctrl+Shift+Tab, but it's possible that this feature will be added in the future.