私はウィンドウを少し速くナビゲートする方法を見つけようとしているので、次のものをマップしたいと思います:
:nmap <silent> <C-F> :wincmd f<CR>
問題は、これが^f(小文字のf)マッピングを再マッピングすることで、これはページダウンです。リマップ^F(大文字F)のみを行い、その^fままにする方法はありますか?
私はウィンドウを少し速くナビゲートする方法を見つけようとしているので、次のものをマップしたいと思います:
:nmap <silent> <C-F> :wincmd f<CR>
問題は、これが^f(小文字のf)マッピングを再マッピングすることで、これはページダウンです。リマップ^F(大文字F)のみを行い、その^fままにする方法はありますか?
回答:
マッピングは、<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互換性の設計上の決定でした)。
可能な解決策:
を押しCtrl+Shift+fたときにVimに異なるコードを送信するようにターミナルエミュレータを設定できます。たとえば、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~")
これは、ためのコードが送信されます<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>f0x1b0x66<Esc>F0x1b0x46
NeoVimでは、Ctrl+Shift+Enterやなどのいくつかのケースを除いて、この問題を解決できていませんCtrl+Shift+Tabが、この機能は将来追加される可能性があります。