¿Puedo asignar una letra mayúscula Ctrl + minúscula por separado de la letra mayúscula Ctrl +?

16

Estoy tratando de descubrir cómo navegar por Windows un poco más rápido, así que me gustaría asignar lo siguiente:

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

El problema es que esto reasigna la asignación ^f(en minúsculas f), que está en la página hacia abajo. ¿Hay alguna forma de reasignar solo ^F(mayúsculas F) y dejar el ^fcomo estaba?

usuario1135541
fuente

Respuestas:

22

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.

Martin Tournoij
fuente