Mapping <C-F>
( Ctrl+letter) her zaman mapping <C-f>
( Ctrl+Shift+letter) ile aynıdır . Birini diğeri olmadan eşleştiremezsiniz.
Sorunun kökü, Vim'in terminalden karakterleri okuması ve her ikisi için de ^F
(ASCII kodu 0x06
) göndermesidir ; Vim, Shift tuşuna basıp basmadığınızı bilmenin bir yolu yoktur. Bu yazı, terminaller ve kontrol karakterleri hakkında daha fazla bilgi sağlar .Ctrl+fCtrl+Shift+f
Teorik olarak, bu olabilir en (veya tüm?) Beri grafik ortamlar çok daha detaylı anahtar olaylarını göndermek, GVIM ile yapılabilir. Ama ne yazık ki, GVIM kadar bir terminal emülatörü gibi çalışır, ve ayırt edemez <C-f>
ve <C-F>
(belki de bu um-GVIM uyumluluğu için bir tasarım karardı) ya da.
Muhtemel çözümler:
Terminal öykünücünüzü, düğmesine bastığınızda Vim'e farklı bir kod gönderecek şekilde yapılandırabilirsiniz Ctrl+Shift+f. Örneğin, xterm için şunları yapabilirsiniz:
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~")
Bu, Vim'e <C-S-F12>
ve <C-S-F11>
Vim'e kod gönderecektir;
nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
Terminal aşağıdakiler için farklı bir kod gönderdiğinden , eşleme yapabileceğinizi unutmayın Alt+Shift+letter: <Esc>f
( 0x1b0x66
) veya <Esc>F
( 0x1b0x46
).
NeoVim, bulabildiğim kadarıyla, Ctrl+Shift+Enterve gibi birkaç durum haricinde bu sorunu çözmedi Ctrl+Shift+Tab, ancak bu özelliğin gelecekte eklenmesi mümkündür.