Czy mogę zmapować Ctrl + wielkie litery oddzielnie od Ctrl + małe litery?


16

Próbuję dowiedzieć się, jak nawigować w systemie Windows nieco szybciej, więc chciałbym zmapować następujące elementy:

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

Problem polega na tym, że odwzorowuje mapowanie ^f(małe litery f), czyli przewijanie strony w dół. Czy jest jakiś sposób, aby zmienić mapowanie ^F(wielkie litery F) i pozostawić tak, ^fjak było?

Odpowiedzi:


22

Mapowanie <C-F>( Ctrl+letter) jest zawsze takie samo jak mapowanie <C-f>( Ctrl+Shift+letter). Nie możesz zmapować jednego bez drugiego.

Źródłem problemu jest to, że Vim odczytuje znaki z terminala, który wysyła ^F(kod ASCII 0x06) zarówno dla, jak Ctrl+fi Ctrl+Shift+f; Vim nie ma pojęcia, czy nacisnąłeś klawisz Shift. Ten post zawiera więcej informacji na temat terminali i znaków kontrolnych .

Teoretycznie można to zrobić za pomocą gVim, ponieważ większość (lub wszystkie?) Środowiska graficzne wysyłają znacznie bardziej szczegółowe kluczowe zdarzenia. Niestety, gVim działa podobnie jak emulator terminala i nie potrafi rozróżnić pomiędzy nimi <C-f>a nimi <C-F>(była to być może decyzja projektowa dotycząca zgodności Vim-gVim).


Możliwe rozwiązania:

  • Możesz skonfigurować emulator terminala, aby po naciśnięciu przycisku wysyłał do Vima inny kod Ctrl+Shift+f. Na przykład dla Xterm możesz wykonać:

    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~")
    

    Spowoduje to wysłanie kodu do <C-S-F12>i <C-S-F11>do Vima, który możesz odebrać za pomocą:

    nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
    nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
    
  • Pamiętaj, że możesz mapować Alt+Shift+letter, ponieważ terminal wysyła inny kod dla tych: <Esc>f( 0x1b0x66) lub <Esc>F( 0x1b0x46).

  • O ile mi wiadomo, NeoVim nie naprawił tego problemu, z wyjątkiem kilku przypadków, takich jak Ctrl+Shift+Enteri Ctrl+Shift+Tab, ale możliwe jest, że ta funkcja zostanie dodana w przyszłości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.