Kann ich einen Strg + Großbuchstaben getrennt von Strg + Kleinbuchstaben zuordnen?


16

Ich versuche herauszufinden, wie ich mit Windows etwas schneller navigieren kann, daher möchte ich Folgendes abbilden:

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

Das Problem ist, dass dadurch die ^f(Kleinbuchstaben- f) Zuordnung neu zugeordnet wird. Gibt es eine Möglichkeit, nur ^F(in Großbuchstaben F) neu zuzuordnen und das zu belassen , ^fwie es war?

Antworten:


22

Mapping <C-F>( Ctrl+letter) ist immer dasselbe wie mapping <C-f>( Ctrl+Shift+letter). Man kann nicht eins ohne das andere abbilden.

Die Wurzel des Problems ist, dass Vim Zeichen vom Terminal liest, das ^F(ASCII-Code 0x06) für beide Ctrl+fund sendet Ctrl+Shift+f; Vim kann nicht wissen, ob Sie die Umschalttaste gedrückt haben. Dieser Beitrag enthält weitere Informationen zu Terminals und Steuerzeichen .

Theoretisch könnte dies mit gVim geschehen, da die meisten (oder alle?) Grafikumgebungen wesentlich detailliertere Schlüsselereignisse senden. Aber leider funktioniert gVim ähnlich wie ein Terminal - Emulator, und kann nicht unterscheiden zwischen <C-f>und <C-F>entweder (das war vielleicht eine Design - Entscheidung für Vim-gVim Kompatibilität).


Mögliche Lösungen:

  • Sie können Ihren Terminalemulator so konfigurieren, dass er beim Drücken von einen anderen Code an Vim sendet Ctrl+Shift+f. Für xterm könnten Sie beispielsweise Folgendes tun:

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

    Dadurch wird der Code für <C-S-F12>und <C-S-F11>an Vim gesendet, mit dem Sie Folgendes abholen können:

    nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
    nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
    
  • Beachten Sie, dass Sie können Karte Alt+Shift+letter, da das Terminal einen anderen Code für diejenigen sendet: <Esc>f( 0x1b0x66) oder <Esc>F( 0x1b0x46).

  • NeoVim hat, soweit ich weiß, dieses Problem nicht behoben, außer in einigen Fällen wie Ctrl+Shift+Enterund Ctrl+Shift+Tab, aber es ist möglich, dass diese Funktion in Zukunft hinzugefügt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.