Mapping <C-F>
( Ctrl+letter) ist immer dasselbe wie mapping <C-f>
( Ctrl+Shift+letter). Man kann nicht eins ohne das andere abbilden.
Die Wurzel des Problems ist, dass Vim Zeichen vom Terminal liest, das ^F
(ASCII-Code 0x06
) für beide Ctrl+fund sendet Ctrl+Shift+f; Vim kann nicht wissen, ob Sie die Umschalttaste gedrückt haben. Dieser Beitrag enthält weitere Informationen zu Terminals und Steuerzeichen .
Theoretisch könnte dies mit gVim geschehen, da die meisten (oder alle?) Grafikumgebungen wesentlich detailliertere Schlüsselereignisse senden. Aber leider funktioniert gVim ähnlich wie ein Terminal - Emulator, und kann nicht unterscheiden zwischen <C-f>
und <C-F>
entweder (das war vielleicht eine Design - Entscheidung für Vim-gVim Kompatibilität).
Mögliche Lösungen:
Sie können Ihren Terminalemulator so konfigurieren, dass er beim Drücken von einen anderen Code an Vim sendet Ctrl+Shift+f. Für xterm könnten Sie beispielsweise Folgendes tun:
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~")
Dadurch wird der Code für <C-S-F12>
und <C-S-F11>
an Vim gesendet, mit dem Sie Folgendes abholen können:
nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
Beachten Sie, dass Sie können Karte Alt+Shift+letter, da das Terminal einen anderen Code für diejenigen sendet: <Esc>f
( 0x1b0x66
) oder <Esc>F
( 0x1b0x46
).
NeoVim hat, soweit ich weiß, dieses Problem nicht behoben, außer in einigen Fällen wie Ctrl+Shift+Enterund Ctrl+Shift+Tab, aber es ist möglich, dass diese Funktion in Zukunft hinzugefügt wird.