Bir Ctrl + büyük harf Ctrl + küçük harften ayrı olarak eşleyebilir miyim?


16

Ben windows daha hızlı gezinmek için nasıl anlamaya çalışıyorum, bu yüzden aşağıdaki harita istiyorum:

:nmap <silent> <C-F> :wincmd f<CR>

Sorun, bu , sayfa aşağı olan ^f(küçük harfli f) eşlemeyi hatırlatmasıdır . Yalnızca ^F(büyük harf F) yeniden eşlemenin ve olduğu ^fgibi bırakmanın herhangi bir yolu var mı ?

Yanıtlar:


22

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.