Чи можна зіставити Ctrl + малі літери окремо від Ctrl + малі літери?


16

Я намагаюся розібратися, як швидше переміщуватися по Windows, тому я хотів би відобразити наступне:

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

Проблема полягає в тому, що переосмислюється ^f(нижнє регістр f) відображення, яке знаходиться на сторінці вниз. Чи є спосіб перезавантажити лише ^Fверхній регістр Fі залишити такий, ^fяк він був?

Відповіді:


22

Картографування <C-F>( Ctrl+letter) завжди те саме, що відображення <C-f>( Ctrl+Shift+letter). Не можна зіставити одне без іншого.

Корінь проблеми полягає в тому, що Vim зчитує символи з терміналу, який надсилає ^F(ASCII код 0x06) і для, Ctrl+fі Ctrl+Shift+f; Vim не може дізнатися, натиснули ви клавішу Shift. Ця публікація надає додаткову інформацію про термінали та символи управління .

Теоретично це можна зробити за допомогою gVim, оскільки більшість (або всі?) Графічних середовищ надсилають набагато більш детальні ключові події. Але, на жаль, gVim працює так само, як емулятор терміналу, і не може розрізнити те <C-f>й <C-F>інше (це, можливо, було дизайнерське рішення для сумісності Vim-gVim).


Можливі рішення:

  • Ви можете налаштувати емулятор терміналу, щоб надсилати інший код на Vim при натисканні Ctrl+Shift+f. Наприклад, для xterm ви можете зробити:

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

    Це надішле код для Vim <C-S-F12>та <C-S-F11>Vim, який ви можете забрати за допомогою:

    nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
    nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
    
  • Зауважте, що ви можете зробити карту Alt+Shift+letter, оскільки термінал надсилає інший код для таких: <Esc>f( 0x1b0x66) або <Esc>F( 0x1b0x46).

  • NeoVim має, наскільки я можу знайти, не усунули цю проблему в протягом декількох випадків , таких як , крім Ctrl+Shift+Enterі Ctrl+Shift+Tab, але цілком можливо , що ця функція буде додана в майбутньому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.